symphony 0.6.0 → 0.7.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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/ChangeLog +34 -2
- data/History.rdoc +10 -0
- data/Rakefile +1 -0
- data/lib/symphony.rb +2 -2
- data/lib/symphony/daemon.rb +6 -4
- data/lib/symphony/signal_handling.rb +7 -0
- data/lib/symphony/task.rb +7 -0
- data/spec/symphony/daemon_spec.rb +71 -0
- metadata +16 -2
- metadata.gz.sig +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27cfb2845ca71c3af5596979ce84fb19c9a3ba6e
|
4
|
+
data.tar.gz: f475feb878e9abf0be8f4fc16fd90f86d7d04193
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75fcf22eea9e1f738eeb502fe7bd31f5ae0c8b845857cd5610404f9943f89303fa2d84713174bda7c753f82e893604325de89fa9594292630d0e70180d781d43
|
7
|
+
data.tar.gz: 550773eda18d10aa46e7bdc1f9a3a14b1e483a9aec9268e65b0c530ae1d19f02972facb0252cb7316f2bb689cca7d21fbbf68809909a152bd5e4c9ace43171d1
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/ChangeLog
CHANGED
@@ -1,9 +1,41 @@
|
|
1
|
+
2014-04-14 Mahlon E. Smith <mahlon@laika.com>
|
2
|
+
|
3
|
+
* Rakefile:
|
4
|
+
Add configurability to the dependencies list.
|
5
|
+
[f73d3ee81d17] [tip]
|
6
|
+
|
7
|
+
2014-04-14 Michael Granger <ged@FaerieMUD.org>
|
8
|
+
|
9
|
+
* .hgtags:
|
10
|
+
Added tag v0.6.0 for changeset a088731f43ff
|
11
|
+
[718f55893ad5]
|
12
|
+
|
13
|
+
* .hgsigs:
|
14
|
+
Added signature for changeset fa6a367872f4
|
15
|
+
[a088731f43ff] [v0.6.0]
|
16
|
+
|
17
|
+
* History.rdoc, lib/symphony.rb:
|
18
|
+
Bump the minor version, update history
|
19
|
+
[fa6a367872f4] [github/master]
|
20
|
+
|
21
|
+
* TODO.md, lib/symphony/queue.rb, spec/symphony/queue_spec.rb:
|
22
|
+
Update the TO-DO list
|
23
|
+
[b30f07c96e7e]
|
24
|
+
|
25
|
+
* lib/symphony/queue.rb:
|
26
|
+
Set cancel-on-failover flag to the queue consumer
|
27
|
+
[7c4d92ddbc79]
|
28
|
+
|
29
|
+
* Rakefile:
|
30
|
+
Remove the ssh-related dev deps
|
31
|
+
[ccfe90203de7]
|
32
|
+
|
1
33
|
2014-04-14 Mahlon E. Smith <mahlon@laika.com>
|
2
34
|
|
3
35
|
* Manifest.txt, Rakefile, lib/symphony/tasks/ssh.rb,
|
4
36
|
lib/symphony/tasks/sshscript.rb:
|
5
37
|
Branch merge from 221b25852ba6.
|
6
|
-
[3673b0e7202d]
|
38
|
+
[3673b0e7202d]
|
7
39
|
|
8
40
|
* .hoerc, Manifest.txt, spec/symphony/mixins_spec.rb:
|
9
41
|
Complete the intervalexpression backout.
|
@@ -41,7 +73,7 @@
|
|
41
73
|
|
42
74
|
* .hgtags:
|
43
75
|
Added tag v0.5.0 for changeset f8e6883990fc
|
44
|
-
[41fc4926342b]
|
76
|
+
[41fc4926342b]
|
45
77
|
|
46
78
|
* .hgsigs:
|
47
79
|
Added signature for changeset 369353a62297
|
data/History.rdoc
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
== v0.7.0 [2014-05-05] Michael Granger <ged@FaerieMUD.org>
|
2
|
+
|
3
|
+
Add a 'before_fork' hook to Symphony::Task.
|
4
|
+
|
5
|
+
|
6
|
+
== v0.6.1 [2014-04-23] Michael Granger <ged@FaerieMUD.org>
|
7
|
+
|
8
|
+
Handle SIGQUIT the same as SIGINT and SIGTERM in the daemon.
|
9
|
+
|
10
|
+
|
1
11
|
== v0.6.0 [2014-04-14] Michael Granger <ged@FaerieMUD.org>
|
2
12
|
|
3
13
|
- Set cancel-on-failover flag in the queue consumer
|
data/Rakefile
CHANGED
@@ -27,6 +27,7 @@ hoespec = Hoe.spec 'symphony' do |spec|
|
|
27
27
|
spec.developer 'Michael Granger', 'ged@FaerieMUD.org'
|
28
28
|
spec.developer 'Mahlon E. Smith', 'mahlon@martini.nu'
|
29
29
|
|
30
|
+
spec.dependency 'configurability', '~> 2.1'
|
30
31
|
spec.dependency 'loggability', '~> 0.10'
|
31
32
|
spec.dependency 'pluggability', '~> 0.4'
|
32
33
|
spec.dependency 'bunny', '~> 1.1'
|
data/lib/symphony.rb
CHANGED
@@ -12,10 +12,10 @@ module Symphony
|
|
12
12
|
Configurability
|
13
13
|
|
14
14
|
# Library version constant
|
15
|
-
VERSION = '0.
|
15
|
+
VERSION = '0.7.0'
|
16
16
|
|
17
17
|
# Version-control revision constant
|
18
|
-
REVISION = %q$Revision:
|
18
|
+
REVISION = %q$Revision: 52300e72d138 $
|
19
19
|
|
20
20
|
|
21
21
|
# The name of the environment variable to check for config file overrides
|
data/lib/symphony/daemon.rb
CHANGED
@@ -113,9 +113,6 @@ class Symphony::Daemon
|
|
113
113
|
|
114
114
|
### Create a new Daemon instance.
|
115
115
|
def initialize
|
116
|
-
# Process control
|
117
|
-
@tasks = self.class.tasks
|
118
|
-
|
119
116
|
@running_tasks = {}
|
120
117
|
@running = false
|
121
118
|
@shutting_down = false
|
@@ -143,6 +140,10 @@ class Symphony::Daemon
|
|
143
140
|
attr_reader :config
|
144
141
|
|
145
142
|
|
143
|
+
# Make a delegator for the class's task list
|
144
|
+
define_method( :tasks, &self.method(:tasks) )
|
145
|
+
|
146
|
+
|
146
147
|
### Returns +true+ if the daemon is still running.
|
147
148
|
def running?
|
148
149
|
return @running
|
@@ -236,7 +237,7 @@ class Symphony::Daemon
|
|
236
237
|
def handle_signal( sig )
|
237
238
|
self.log.debug "Handling signal %s in PID %d" % [ sig, Process.pid ]
|
238
239
|
case sig
|
239
|
-
when :INT, :TERM
|
240
|
+
when :INT, :TERM, :QUIT
|
240
241
|
if @running
|
241
242
|
self.log.warn "%s signal: graceful shutdown" % [ sig ]
|
242
243
|
@running = false
|
@@ -338,6 +339,7 @@ class Symphony::Daemon
|
|
338
339
|
return if self.shutting_down?
|
339
340
|
|
340
341
|
self.log.debug "Starting a %p." % [ task_class ]
|
342
|
+
task_class.before_fork
|
341
343
|
pid = Process.fork do
|
342
344
|
task_class.after_fork
|
343
345
|
task_class.run
|
@@ -108,5 +108,12 @@ module Symphony::SignalHandling
|
|
108
108
|
end
|
109
109
|
|
110
110
|
|
111
|
+
### Simulate the receipt of the specified +signal+ (probably only useful
|
112
|
+
### in testing).
|
113
|
+
def simulate_signal( signal )
|
114
|
+
Thread.main[:signal_queue] << signal.to_sym
|
115
|
+
self.wake_up
|
116
|
+
end
|
117
|
+
|
111
118
|
end # module Symphony::SignalHandling
|
112
119
|
|
data/lib/symphony/task.rb
CHANGED
@@ -51,6 +51,13 @@ class Symphony::Task
|
|
51
51
|
end
|
52
52
|
|
53
53
|
|
54
|
+
### Prepare the process to be forked.
|
55
|
+
def self::before_fork
|
56
|
+
self.log.debug "Before fork [%d]: Threads: %p" % [ Process.pid, ThreadGroup::Default.list ]
|
57
|
+
# No-op
|
58
|
+
end
|
59
|
+
|
60
|
+
|
54
61
|
### Prepare the process after being forked from the Daemon.
|
55
62
|
def self::after_fork
|
56
63
|
self.log.debug "After fork [%d]: Threads: %p" % [ Process.pid, ThreadGroup::Default.list ]
|
@@ -5,9 +5,80 @@ require_relative '../helpers'
|
|
5
5
|
|
6
6
|
require 'symphony/daemon'
|
7
7
|
|
8
|
+
class TestTask < Symphony::Task
|
9
|
+
|
10
|
+
# Don't ever really try to handle messages.
|
11
|
+
def start_handling_messages
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
|
8
17
|
describe Symphony::Daemon do
|
9
18
|
|
19
|
+
before( :each ) do
|
20
|
+
allow( Process ).to receive( :fork ).and_yield
|
21
|
+
allow( Process ).to receive( :setpgid )
|
22
|
+
Symphony::Daemon.configure( tasks: ['test', 'test'] )
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
let( :daemon ) { described_class.new }
|
27
|
+
|
28
|
+
|
29
|
+
it "can report what version it is" do
|
30
|
+
expect(
|
31
|
+
described_class.version_string
|
32
|
+
).to match( /#{described_class} #{Symphony::VERSION}/i )
|
33
|
+
end
|
34
|
+
|
35
|
+
it "can include its build number in its version string" do
|
36
|
+
expect(
|
37
|
+
described_class.version_string( true )
|
38
|
+
).to match( /\(build \p{Xdigit}+\)/i )
|
39
|
+
end
|
40
|
+
|
41
|
+
it "loads a task class for each configured task" do
|
42
|
+
expect( daemon.tasks.size ).to eq( 2 )
|
43
|
+
expect( daemon.tasks ).to include( TestTask )
|
44
|
+
end
|
45
|
+
|
46
|
+
it "forks a child for each task" do
|
47
|
+
expect( Process ).to receive( :fork ).twice.and_yield
|
48
|
+
expect( TestTask ).to receive( :after_fork ).twice
|
49
|
+
expect( TestTask ).to receive( :run ).and_return( 118, 119 ) # pids
|
50
|
+
|
51
|
+
daemon.simulate_signal( :TERM )
|
52
|
+
|
53
|
+
status = double( Process::Status, :success? => true )
|
54
|
+
expect( Process ).to receive( :waitpid2 ).
|
55
|
+
with( -1, Process::WNOHANG|Process::WUNTRACED ).
|
56
|
+
and_return( [118, status], [119, status], nil )
|
57
|
+
|
58
|
+
daemon.run_tasks
|
59
|
+
end
|
60
|
+
|
61
|
+
it "exits gracefully on one SIGINT" do
|
62
|
+
daemon.tasks.clear
|
63
|
+
thr = Thread.new { daemon.run_tasks }
|
64
|
+
sleep 0.1 until daemon.running? || !thr.alive?
|
65
|
+
|
66
|
+
expect {
|
67
|
+
daemon.simulate_signal( :INT )
|
68
|
+
thr.join( 2 )
|
69
|
+
}.to change { daemon.running? }.from( true ).to( false )
|
70
|
+
end
|
71
|
+
|
72
|
+
it "exits gracefully on one SIGQUIT" do
|
73
|
+
daemon.tasks.clear
|
74
|
+
thr = Thread.new { daemon.run_tasks }
|
75
|
+
sleep 0.1 until daemon.running? || !thr.alive?
|
10
76
|
|
77
|
+
expect {
|
78
|
+
daemon.simulate_signal( :QUIT )
|
79
|
+
thr.join( 2 )
|
80
|
+
}.to change { daemon.running? }.from( true ).to( false )
|
81
|
+
end
|
11
82
|
|
12
83
|
end
|
13
84
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: symphony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -31,8 +31,22 @@ cert_chain:
|
|
31
31
|
c7ZKPJcWBv0sm81+FCZXNACn2f9jfF8OQinxVs0O052KbGuEQaaiGIYeuuwQE2q6
|
32
32
|
ggcrPfcYeTwWlfZPu2LrBg==
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2014-
|
34
|
+
date: 2014-05-05 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: configurability
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ~>
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '2.1'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ~>
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '2.1'
|
36
50
|
- !ruby/object:Gem::Dependency
|
37
51
|
name: loggability
|
38
52
|
requirement: !ruby/object:Gem::Requirement
|
metadata.gz.sig
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
=`ܢ���:b�a-q6P�0rج@��D��&���f�{���ȅ)����q�N�^�ˠ�������X�&�k�F�K��?kI^ܐS���f �?�������o)��ǒ��f��Y�3�n�����Q�ǘ�����o�g���/�Z�.�D1�qA��y����Џ���*��X������k}��d.� ���\�L�.Y����ԙˑ�J��2T�´\p��/rn��:���v�&h ��l�M���L��/Q
|