blue_green_process 0.1.4 → 0.1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c8905db7b63e35a80a3fa1272553fa4f84002e06747501b5749110a6edfed79e
4
- data.tar.gz: 467fbb4d348d6fae9cfc70a013f88a560cc69a97690451d0b53908585d312e20
3
+ metadata.gz: de6dcd9d5d0d1f000d05cecc5a9e71c9aac40785ab9b662ed3f3e355520583b8
4
+ data.tar.gz: 869f46eade0cbc23f0ad787f37c32dc88e00a8887bdb4d8d16761a00725f10d3
5
5
  SHA512:
6
- metadata.gz: f042564e95f91038d87faaae43d891d798204784a27f0b2fb1a038df195717c58755c7a65531216d97f4477296dee1775119ba1c01560c7fb067a336c1b613aa
7
- data.tar.gz: 28d937c6280847b821ef49f4c247649549a13bf4a5c0f62d444cb6d5c391d88c491ac2d2fcca38a56947e4eb66b5583200885b4cc4e4f40c63cd61c2a8ac5bc1
6
+ metadata.gz: 3f91ae14371f167c9d1b4ca8480a4b8a02c3487daca3a19e0ce299a99d46c56fe47381a6ed30c61399415995865b7f4118aa7ce823ca1bdd60f27b64fc6e6b7a
7
+ data.tar.gz: b3f7831d0b007d35ba40958b7b14e6faac6f2ad67f0d03bacc1f515f37474f0889c7514bc01dd88c30b74be590dcf20597f0395982dee00119f1ef6e603c04c6
data/.rubocop.yml CHANGED
@@ -40,3 +40,6 @@ Metrics/ClassLength:
40
40
 
41
41
  Lint/AmbiguousBlockAssociation:
42
42
  Enabled: false
43
+
44
+ Layout/LineLength:
45
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
- ## [0.1.4] - 2022-12-
2
- * BlueGreenProcess.terminate_workers_immediately を呼び出すことで、シグナル経由で終了できるようになりました
1
+ ## [0.1.4.3] - 2024-1-8
2
+ - 処理を停止するときにpidを書いたファイルを削除するようになりました
3
+
4
+ ## [0.1.4.2] - 2022-12-25
5
+ * プロセス終了時にDRb.stop_serviceを呼ぶのをやめました
6
+
7
+ ## [0.1.4.1] - 2022-12-13
8
+ * プロセス終了時にDRb.stop_serviceを呼ぶようにしました
9
+
10
+ ## [0.1.4] - 2022-12-12
11
+ * BlueGreenProcess.terminate_workers_immediately を呼び出すことで、masterプロセスからシグナル経由でworkerプロセスを終了できるようになりました
3
12
 
4
13
  ## [0.1.3] - 2022-9-5
5
14
  * 単一プロセスでの実行を延長するとGC.startを実行しなくなりました
data/Gemfile CHANGED
@@ -8,4 +8,4 @@ gemspec
8
8
  gem "pry"
9
9
  gem "rake"
10
10
  gem "rspec"
11
- gem "rubocop", "~> 1.21"
11
+ gem "rubocop"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- blue_green_process (0.1.4)
4
+ blue_green_process (0.1.4.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -12,11 +12,13 @@ GEM
12
12
  json (2.6.2)
13
13
  method_source (1.0.0)
14
14
  parallel (1.22.1)
15
- parser (3.1.2.0)
15
+ parser (3.3.0.2)
16
16
  ast (~> 2.4.1)
17
+ racc
17
18
  pry (0.14.1)
18
19
  coderay (~> 1.1)
19
20
  method_source (~> 1.0)
21
+ racc (1.7.3)
20
22
  rainbow (3.1.1)
21
23
  rake (13.0.6)
22
24
  regexp_parser (2.5.0)
@@ -59,7 +61,4 @@ DEPENDENCIES
59
61
  pry
60
62
  rake
61
63
  rspec
62
- rubocop (~> 1.21)
63
-
64
- BUNDLED WITH
65
- 2.3.15
64
+ rubocop
data/README.md CHANGED
@@ -2,29 +2,6 @@
2
2
 
3
3
  A library that solves GC bottlenecks with multi-process.
4
4
 
5
- ```mermaid
6
- sequenceDiagram
7
- autonumber
8
- loop
9
- Master->>+Blue: be active
10
- Blue->>-Master: response
11
- Master->>+Blue: work
12
- Blue->>-Master: response
13
- Master->>+Blue: be inactive
14
- Blue->>-Master: response
15
- Blue-->>Blue: GC.start
16
- Master->>+Green: be active
17
- Green->>-Master: response
18
- Master->>+Green: work
19
- Green->>-Master: response
20
- Master->>+Green: be inactive
21
- Green->>-Master: response
22
- Green->>Green: GC.start
23
- end
24
-
25
- ```
26
-
27
-
28
5
  ## Installation
29
6
 
30
7
  Install the gem and add to the application's Gemfile by executing:
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "English"
3
4
  module BlueGreenProcess
4
5
  class ErrorWrapper < StandardError
5
6
  attr_accessor :error_class, :message
@@ -70,9 +71,7 @@ module BlueGreenProcess
70
71
  data: BlueGreenProcess::SharedVariable.data }.to_json)
71
72
  ::GC.start unless BlueGreenProcess::SharedVariable.extend_run_on_this_process
72
73
  when BlueGreenProcess::PROCESS_COMMAND_WORK
73
- if process_status == BlueGreenProcess::PROCESS_STATUS_INACTIVE
74
- warn "Should not be able to run in this status"
75
- end
74
+ warn "Should not be able to run in this status" if process_status == BlueGreenProcess::PROCESS_STATUS_INACTIVE
76
75
 
77
76
  begin
78
77
  worker_instance.work(*label)
@@ -116,6 +115,9 @@ module BlueGreenProcess
116
115
  def shutdown
117
116
  @processes.each(&:shutdown)
118
117
  Process.waitall
118
+ ensure
119
+ # 正常終了だとworkerから削除するケースはないんだけど、想定外のエラーが起きた時を考慮してworkerから削除する
120
+ FileUtils.rm_rf(BlueGreenProcess::PID_PATH)
119
121
  end
120
122
 
121
123
  private
@@ -159,8 +161,10 @@ module BlueGreenProcess
159
161
  while (readable_io = IO.select([self_read]))
160
162
  signal = readable_io.first[0].gets.strip
161
163
  case signal
162
- when "INT", "TERM"
164
+ when "TERM"
163
165
  raise Interrupt
166
+ when "INT"
167
+ BlueGreenProcess.logger.warn "[BLUE_GREEN_PROCESS][#{$PROCESS_ID}] INTシグナルは無視します"
164
168
  end
165
169
  end
166
170
  rescue Interrupt
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BlueGreenProcess
4
- VERSION = "0.1.4"
4
+ VERSION = "0.1.4.3"
5
5
  end
@@ -49,7 +49,7 @@ module BlueGreenProcess
49
49
  def wait_response
50
50
  return unless (text = read)
51
51
 
52
- response = JSON.parse(text.strip)
52
+ response = JSON.parse(text.strip.scrub)
53
53
  BlueGreenProcess::SharedVariable.instance.restore(response["data"])
54
54
  case response["c"]
55
55
  when BlueGreenProcess::RESPONSE_OK
@@ -57,18 +57,25 @@ module BlueGreenProcess
57
57
 
58
58
  # @return [void]
59
59
  def self.terminate_workers_immediately
60
+ BlueGreenProcess.logger.warn "[BLUE_GREEN_PROCESS][#{$PROCESS_ID}] TERMシグナルを送信します"
61
+
60
62
  worker_pids = nil
61
63
  begin
62
64
  worker_pids = File.read(PID_PATH).split(",").map(&:to_i)
63
65
  rescue Errno::ENOENT
64
- warn("#{PID_PATH}にファイルがありませんでした")
66
+ BlueGreenProcess.logger.warn("[BLUE_GREEN_PROCESS] #{PID_PATH}にファイルがありませんでした")
65
67
  return
66
68
  end
67
69
 
68
70
  worker_pids.each do |worker_pid|
69
71
  Process.kill "TERM", worker_pid
70
72
  rescue Errno::ESRCH => e
71
- warn("BlueGreenProcess workerプロセス(#{worker_pid})の終了に失敗しました。", e.message)
73
+ BlueGreenProcess.logger.warn("[BLUE_GREEN_PROCESS][#{$PROCESS_ID}] workerプロセス(#{worker_pid})の終了に失敗しました。#{e.message}")
72
74
  end
75
+ BlueGreenProcess.logger.warn "[BLUE_GREEN_PROCESS][#{$PROCESS_ID}] workerプロセスへTERMシグナルを送信しました"
76
+ Process.waitall
77
+ BlueGreenProcess.logger.warn "[BLUE_GREEN_PROCESS][#{$PROCESS_ID}] workerプロセスが終了しました"
78
+ ensure
79
+ FileUtils.rm_rf(BlueGreenProcess::PID_PATH)
73
80
  end
74
81
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blue_green_process
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - jiikko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-12 00:00:00.000000000 Z
11
+ date: 2024-01-08 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A library that solves GC bottlenecks with multi-process.
14
14
  email: