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 +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +11 -2
- data/Gemfile +1 -1
- data/Gemfile.lock +5 -6
- data/README.md +0 -23
- data/lib/blue_green_process/master_process.rb +8 -4
- data/lib/blue_green_process/version.rb +1 -1
- data/lib/blue_green_process/worker_process.rb +1 -1
- data/lib/blue_green_process.rb +9 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de6dcd9d5d0d1f000d05cecc5a9e71c9aac40785ab9b662ed3f3e355520583b8
|
4
|
+
data.tar.gz: 869f46eade0cbc23f0ad787f37c32dc88e00a8887bdb4d8d16761a00725f10d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3f91ae14371f167c9d1b4ca8480a4b8a02c3487daca3a19e0ce299a99d46c56fe47381a6ed30c61399415995865b7f4118aa7ce823ca1bdd60f27b64fc6e6b7a
|
7
|
+
data.tar.gz: b3f7831d0b007d35ba40958b7b14e6faac6f2ad67f0d03bacc1f515f37474f0889c7514bc01dd88c30b74be590dcf20597f0395982dee00119f1ef6e603c04c6
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
|
-
## [0.1.4] -
|
2
|
-
|
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
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.
|
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
|
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 "
|
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
|
@@ -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
|
data/lib/blue_green_process.rb
CHANGED
@@ -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("
|
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:
|
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:
|