blue_green_process 0.1.4 → 0.1.4.3

Sign up to get free protection for your applications and to get access to all the features.
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: