service_skeleton 0.0.0.49.g47046b9 → 2.0.0
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/.git-blame-ignore-revs +2 -0
- data/.github/workflows/ci.yml +52 -0
- data/.rubocop.yml +11 -1
- data/README.md +7 -59
- data/lib/service_skeleton/config.rb +20 -13
- data/lib/service_skeleton/generator.rb +3 -3
- data/lib/service_skeleton/runner.rb +3 -3
- data/lib/service_skeleton/ultravisor_children.rb +4 -1
- data/service_skeleton.gemspec +6 -16
- data/ultravisor/.yardopts +1 -0
- data/ultravisor/Guardfile +9 -0
- data/ultravisor/README.md +404 -0
- data/ultravisor/lib/ultravisor.rb +216 -0
- data/ultravisor/lib/ultravisor/child.rb +481 -0
- data/ultravisor/lib/ultravisor/child/call.rb +21 -0
- data/ultravisor/lib/ultravisor/child/call_receiver.rb +14 -0
- data/ultravisor/lib/ultravisor/child/cast.rb +16 -0
- data/ultravisor/lib/ultravisor/child/cast_receiver.rb +11 -0
- data/ultravisor/lib/ultravisor/child/process_cast_call.rb +39 -0
- data/ultravisor/lib/ultravisor/error.rb +25 -0
- data/ultravisor/lib/ultravisor/logging_helpers.rb +32 -0
- data/ultravisor/spec/example_group_methods.rb +19 -0
- data/ultravisor/spec/example_methods.rb +8 -0
- data/ultravisor/spec/spec_helper.rb +52 -0
- data/ultravisor/spec/ultravisor/add_child_spec.rb +79 -0
- data/ultravisor/spec/ultravisor/child/call_spec.rb +121 -0
- data/ultravisor/spec/ultravisor/child/cast_spec.rb +111 -0
- data/ultravisor/spec/ultravisor/child/id_spec.rb +21 -0
- data/ultravisor/spec/ultravisor/child/new_spec.rb +152 -0
- data/ultravisor/spec/ultravisor/child/restart_delay_spec.rb +40 -0
- data/ultravisor/spec/ultravisor/child/restart_spec.rb +70 -0
- data/ultravisor/spec/ultravisor/child/run_spec.rb +95 -0
- data/ultravisor/spec/ultravisor/child/shutdown_spec.rb +124 -0
- data/ultravisor/spec/ultravisor/child/spawn_spec.rb +107 -0
- data/ultravisor/spec/ultravisor/child/unsafe_instance_spec.rb +55 -0
- data/ultravisor/spec/ultravisor/child/wait_spec.rb +32 -0
- data/ultravisor/spec/ultravisor/new_spec.rb +71 -0
- data/ultravisor/spec/ultravisor/remove_child_spec.rb +49 -0
- data/ultravisor/spec/ultravisor/run_spec.rb +334 -0
- data/ultravisor/spec/ultravisor/shutdown_spec.rb +106 -0
- metadata +48 -63
- data/.travis.yml +0 -11
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative "../spec_helper"
|
3
|
+
|
4
|
+
require_relative "../../lib/ultravisor"
|
5
|
+
|
6
|
+
describe Ultravisor do
|
7
|
+
let(:args) { {} }
|
8
|
+
let(:ultravisor) { Ultravisor.new(**args) }
|
9
|
+
let(:mock_thread) { instance_double(Thread) }
|
10
|
+
|
11
|
+
describe "#shutdown" do
|
12
|
+
it "takes the @op_m lock" do
|
13
|
+
expect(ultravisor.instance_variable_get(:@op_m)).to receive(:synchronize).and_call_original
|
14
|
+
|
15
|
+
ultravisor.shutdown
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when the ultravisor isn't running" do
|
19
|
+
it "returns itself" do
|
20
|
+
expect(ultravisor.shutdown).to eq(ultravisor)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "when the ultravisor is running" do
|
25
|
+
before(:each) do
|
26
|
+
ultravisor.instance_variable_set(:@running_thread, mock_thread)
|
27
|
+
allow(ultravisor.instance_variable_get(:@op_cv))
|
28
|
+
.to receive(:wait) do
|
29
|
+
ultravisor.instance_variable_set(:@running_thread, nil)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
it "signals the ultravisor to shutdown" do
|
34
|
+
expect(ultravisor.instance_variable_get(:@queue)).to receive(:<<).with(:shutdown)
|
35
|
+
|
36
|
+
ultravisor.shutdown
|
37
|
+
end
|
38
|
+
|
39
|
+
it "waits until the CV is signalled" do
|
40
|
+
expect(ultravisor.instance_variable_get(:@op_cv)).to receive(:wait) do |m|
|
41
|
+
expect(m).to eq(ultravisor.instance_variable_get(:@op_m))
|
42
|
+
ultravisor.instance_variable_set(:@running_thread, nil)
|
43
|
+
nil
|
44
|
+
end
|
45
|
+
|
46
|
+
ultravisor.shutdown
|
47
|
+
end
|
48
|
+
|
49
|
+
context "when asked to not wait" do
|
50
|
+
it "doesn't wait on the CV" do
|
51
|
+
expect(ultravisor.instance_variable_get(:@op_cv)).to_not receive(:wait)
|
52
|
+
|
53
|
+
ultravisor.shutdown(wait: false)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it "returns itself" do
|
58
|
+
expect(ultravisor.shutdown).to eq(ultravisor)
|
59
|
+
end
|
60
|
+
|
61
|
+
context "when forced" do
|
62
|
+
before(:each) do
|
63
|
+
allow(mock_thread).to receive(:kill)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "kills the thread" do
|
67
|
+
expect(mock_thread).to receive(:kill)
|
68
|
+
|
69
|
+
ultravisor.shutdown(force: true)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "tells everyone waiting for the shutdown that the deed is done" do
|
73
|
+
expect(ultravisor.instance_variable_get(:@op_cv)).to receive(:broadcast)
|
74
|
+
|
75
|
+
ultravisor.shutdown(force: true)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "unsets the running thread" do
|
79
|
+
ultravisor.shutdown(force: true)
|
80
|
+
|
81
|
+
expect(ultravisor.instance_variable_get(:@running_thread)).to be(nil)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "doesn't wait on the CV" do
|
85
|
+
expect(ultravisor.instance_variable_get(:@op_cv)).to_not receive(:wait)
|
86
|
+
|
87
|
+
ultravisor.shutdown(force: true)
|
88
|
+
end
|
89
|
+
|
90
|
+
context "with children" do
|
91
|
+
let(:child) { Ultravisor::Child.new(id: :one, klass: Object, method: :to_s) }
|
92
|
+
|
93
|
+
before(:each) do
|
94
|
+
ultravisor.instance_variable_set(:@children, [[:child, child]])
|
95
|
+
end
|
96
|
+
|
97
|
+
it "forcibly shuts down the children" do
|
98
|
+
expect(child).to receive(:shutdown).with(force: true)
|
99
|
+
|
100
|
+
ultravisor.shutdown(force: true)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: service_skeleton
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Palmer
|
8
|
+
- Sam Saffron
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2021-03-01 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: frankenstein
|
@@ -28,20 +29,14 @@ dependencies:
|
|
28
29
|
name: loggerstash
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
|
-
- - "
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0.0.9
|
34
|
-
- - "<"
|
32
|
+
- - "~>"
|
35
33
|
- !ruby/object:Gem::Version
|
36
34
|
version: '1'
|
37
35
|
type: :runtime
|
38
36
|
prerelease: false
|
39
37
|
version_requirements: !ruby/object:Gem::Requirement
|
40
38
|
requirements:
|
41
|
-
- - "
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: 0.0.9
|
44
|
-
- - "<"
|
39
|
+
- - "~>"
|
45
40
|
- !ruby/object:Gem::Version
|
46
41
|
version: '1'
|
47
42
|
- !ruby/object:Gem::Dependency
|
@@ -86,20 +81,6 @@ dependencies:
|
|
86
81
|
- - "~>"
|
87
82
|
- !ruby/object:Gem::Version
|
88
83
|
version: '0.2'
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
|
-
name: ultravisor
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - "~>"
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: 0.a
|
96
|
-
type: :runtime
|
97
|
-
prerelease: false
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
99
|
-
requirements:
|
100
|
-
- - "~>"
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: 0.a
|
103
84
|
- !ruby/object:Gem::Dependency
|
104
85
|
name: bundler
|
105
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -115,7 +96,7 @@ dependencies:
|
|
115
96
|
- !ruby/object:Gem::Version
|
116
97
|
version: '0'
|
117
98
|
- !ruby/object:Gem::Dependency
|
118
|
-
name:
|
99
|
+
name: guard-rspec
|
119
100
|
requirement: !ruby/object:Gem::Requirement
|
120
101
|
requirements:
|
121
102
|
- - ">="
|
@@ -129,7 +110,7 @@ dependencies:
|
|
129
110
|
- !ruby/object:Gem::Version
|
130
111
|
version: '0'
|
131
112
|
- !ruby/object:Gem::Dependency
|
132
|
-
name:
|
113
|
+
name: guard-rubocop
|
133
114
|
requirement: !ruby/object:Gem::Requirement
|
134
115
|
requirements:
|
135
116
|
- - ">="
|
@@ -143,7 +124,7 @@ dependencies:
|
|
143
124
|
- !ruby/object:Gem::Version
|
144
125
|
version: '0'
|
145
126
|
- !ruby/object:Gem::Dependency
|
146
|
-
name:
|
127
|
+
name: rack-test
|
147
128
|
requirement: !ruby/object:Gem::Requirement
|
148
129
|
requirements:
|
149
130
|
- - ">="
|
@@ -157,7 +138,7 @@ dependencies:
|
|
157
138
|
- !ruby/object:Gem::Version
|
158
139
|
version: '0'
|
159
140
|
- !ruby/object:Gem::Dependency
|
160
|
-
name:
|
141
|
+
name: rake
|
161
142
|
requirement: !ruby/object:Gem::Requirement
|
162
143
|
requirements:
|
163
144
|
- - ">="
|
@@ -171,7 +152,7 @@ dependencies:
|
|
171
152
|
- !ruby/object:Gem::Version
|
172
153
|
version: '0'
|
173
154
|
- !ruby/object:Gem::Dependency
|
174
|
-
name:
|
155
|
+
name: redcarpet
|
175
156
|
requirement: !ruby/object:Gem::Requirement
|
176
157
|
requirements:
|
177
158
|
- - ">="
|
@@ -185,21 +166,7 @@ dependencies:
|
|
185
166
|
- !ruby/object:Gem::Version
|
186
167
|
version: '0'
|
187
168
|
- !ruby/object:Gem::Dependency
|
188
|
-
name:
|
189
|
-
requirement: !ruby/object:Gem::Requirement
|
190
|
-
requirements:
|
191
|
-
- - "~>"
|
192
|
-
- !ruby/object:Gem::Version
|
193
|
-
version: '12.0'
|
194
|
-
type: :development
|
195
|
-
prerelease: false
|
196
|
-
version_requirements: !ruby/object:Gem::Requirement
|
197
|
-
requirements:
|
198
|
-
- - "~>"
|
199
|
-
- !ruby/object:Gem::Version
|
200
|
-
version: '12.0'
|
201
|
-
- !ruby/object:Gem::Dependency
|
202
|
-
name: redcarpet
|
169
|
+
name: rspec
|
203
170
|
requirement: !ruby/object:Gem::Requirement
|
204
171
|
requirements:
|
205
172
|
- - ">="
|
@@ -213,7 +180,7 @@ dependencies:
|
|
213
180
|
- !ruby/object:Gem::Version
|
214
181
|
version: '0'
|
215
182
|
- !ruby/object:Gem::Dependency
|
216
|
-
name:
|
183
|
+
name: rubocop
|
217
184
|
requirement: !ruby/object:Gem::Requirement
|
218
185
|
requirements:
|
219
186
|
- - ">="
|
@@ -226,20 +193,6 @@ dependencies:
|
|
226
193
|
- - ">="
|
227
194
|
- !ruby/object:Gem::Version
|
228
195
|
version: '0'
|
229
|
-
- !ruby/object:Gem::Dependency
|
230
|
-
name: rubocop
|
231
|
-
requirement: !ruby/object:Gem::Requirement
|
232
|
-
requirements:
|
233
|
-
- - "~>"
|
234
|
-
- !ruby/object:Gem::Version
|
235
|
-
version: '0.79'
|
236
|
-
type: :development
|
237
|
-
prerelease: false
|
238
|
-
version_requirements: !ruby/object:Gem::Requirement
|
239
|
-
requirements:
|
240
|
-
- - "~>"
|
241
|
-
- !ruby/object:Gem::Version
|
242
|
-
version: '0.79'
|
243
196
|
- !ruby/object:Gem::Dependency
|
244
197
|
name: rubocop-discourse
|
245
198
|
requirement: !ruby/object:Gem::Requirement
|
@@ -290,15 +243,16 @@ description: |
|
|
290
243
|
for your services, as well as a collection of helper classes to manage
|
291
244
|
common aspects of a system service.
|
292
245
|
email:
|
293
|
-
-
|
246
|
+
- sam.saffron@discourse.org
|
294
247
|
executables: []
|
295
248
|
extensions: []
|
296
249
|
extra_rdoc_files: []
|
297
250
|
files:
|
298
251
|
- ".editorconfig"
|
252
|
+
- ".git-blame-ignore-revs"
|
253
|
+
- ".github/workflows/ci.yml"
|
299
254
|
- ".gitignore"
|
300
255
|
- ".rubocop.yml"
|
301
|
-
- ".travis.yml"
|
302
256
|
- ".yardopts"
|
303
257
|
- CODE_OF_CONDUCT.md
|
304
258
|
- CONTRIBUTING.md
|
@@ -331,6 +285,37 @@ files:
|
|
331
285
|
- lib/service_skeleton/ultravisor_children.rb
|
332
286
|
- lib/service_skeleton/ultravisor_loggerstash.rb
|
333
287
|
- service_skeleton.gemspec
|
288
|
+
- ultravisor/.yardopts
|
289
|
+
- ultravisor/Guardfile
|
290
|
+
- ultravisor/README.md
|
291
|
+
- ultravisor/lib/ultravisor.rb
|
292
|
+
- ultravisor/lib/ultravisor/child.rb
|
293
|
+
- ultravisor/lib/ultravisor/child/call.rb
|
294
|
+
- ultravisor/lib/ultravisor/child/call_receiver.rb
|
295
|
+
- ultravisor/lib/ultravisor/child/cast.rb
|
296
|
+
- ultravisor/lib/ultravisor/child/cast_receiver.rb
|
297
|
+
- ultravisor/lib/ultravisor/child/process_cast_call.rb
|
298
|
+
- ultravisor/lib/ultravisor/error.rb
|
299
|
+
- ultravisor/lib/ultravisor/logging_helpers.rb
|
300
|
+
- ultravisor/spec/example_group_methods.rb
|
301
|
+
- ultravisor/spec/example_methods.rb
|
302
|
+
- ultravisor/spec/spec_helper.rb
|
303
|
+
- ultravisor/spec/ultravisor/add_child_spec.rb
|
304
|
+
- ultravisor/spec/ultravisor/child/call_spec.rb
|
305
|
+
- ultravisor/spec/ultravisor/child/cast_spec.rb
|
306
|
+
- ultravisor/spec/ultravisor/child/id_spec.rb
|
307
|
+
- ultravisor/spec/ultravisor/child/new_spec.rb
|
308
|
+
- ultravisor/spec/ultravisor/child/restart_delay_spec.rb
|
309
|
+
- ultravisor/spec/ultravisor/child/restart_spec.rb
|
310
|
+
- ultravisor/spec/ultravisor/child/run_spec.rb
|
311
|
+
- ultravisor/spec/ultravisor/child/shutdown_spec.rb
|
312
|
+
- ultravisor/spec/ultravisor/child/spawn_spec.rb
|
313
|
+
- ultravisor/spec/ultravisor/child/unsafe_instance_spec.rb
|
314
|
+
- ultravisor/spec/ultravisor/child/wait_spec.rb
|
315
|
+
- ultravisor/spec/ultravisor/new_spec.rb
|
316
|
+
- ultravisor/spec/ultravisor/remove_child_spec.rb
|
317
|
+
- ultravisor/spec/ultravisor/run_spec.rb
|
318
|
+
- ultravisor/spec/ultravisor/shutdown_spec.rb
|
334
319
|
homepage: https://github.com/discourse/service_skeleton
|
335
320
|
licenses: []
|
336
321
|
metadata: {}
|
@@ -345,9 +330,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
345
330
|
version: 2.5.0
|
346
331
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
347
332
|
requirements:
|
348
|
-
- - "
|
333
|
+
- - ">="
|
349
334
|
- !ruby/object:Gem::Version
|
350
|
-
version:
|
335
|
+
version: '0'
|
351
336
|
requirements: []
|
352
337
|
rubygems_version: 3.0.3
|
353
338
|
signing_key:
|