pebbles-river 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/pebbles/river/supervisor.rb +61 -19
- data/lib/pebbles/river/version.rb +1 -1
- data/lib/pebbles/river/worker.rb +1 -1
- data/pebbles-river.gemspec +1 -1
- metadata +25 -44
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4bc47f2039f74ecd2da833ce7c18e8335503e845
|
4
|
+
data.tar.gz: c67d6c720fe6e37e978ee2c3d0029cf6d6947ce6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9bafbd8b49a3f568e85c6a682d32d9c92813b31b4217751cad7733a44b55fc73cfc408912c02adef1531902be4adfd0e832774fd441cca56a0af07834fd2fce6
|
7
|
+
data.tar.gz: 4d1733af9cde03f3ed7f3565584c6ba20f84b89eb8fb9f35e1790026996f26e97e3cdf9784c390dd61b20209e4ceeb19d719c047fd7f048cf995d47930808619
|
@@ -13,9 +13,9 @@ module Pebbles
|
|
13
13
|
options.assert_valid_keys(:logger, :pid_file, :worker_count, :worker)
|
14
14
|
|
15
15
|
@worker_count = options[:worker_count] || 1
|
16
|
-
|
17
16
|
@prefork_pools = []
|
18
17
|
@worker_modules = []
|
18
|
+
@recovering = true
|
19
19
|
end
|
20
20
|
|
21
21
|
def start_workers
|
@@ -23,11 +23,13 @@ module Pebbles
|
|
23
23
|
raise ConfigurationError.new("No listeners configured")
|
24
24
|
end
|
25
25
|
|
26
|
-
@worker_modules.each do |min_worker_count, m|
|
27
|
-
|
28
|
-
Servolux::Prefork.new(
|
29
|
-
|
30
|
-
|
26
|
+
@worker_modules.each do |name, min_worker_count, m|
|
27
|
+
if min_worker_count > 0
|
28
|
+
prefork = Servolux::Prefork.new(min_workers: min_worker_count, module: m)
|
29
|
+
@prefork_pools.push([name, prefork])
|
30
|
+
else
|
31
|
+
logger.info "[#{name}] Workers disabled"
|
32
|
+
end
|
31
33
|
end
|
32
34
|
end
|
33
35
|
|
@@ -53,15 +55,17 @@ module Pebbles
|
|
53
55
|
end
|
54
56
|
})
|
55
57
|
|
56
|
-
|
58
|
+
name = queue_spec[:name]
|
59
|
+
|
60
|
+
process_name = "#{@name}: queue worker: #{name}"
|
57
61
|
logger = @logger
|
58
62
|
worker_count = worker_options[:worker_count] || @worker_count
|
59
63
|
|
60
|
-
@worker_modules.push([worker_count, Module.new {
|
64
|
+
@worker_modules.push([name, worker_count, Module.new {
|
61
65
|
define_method :execute do
|
62
66
|
$0 = process_name
|
63
67
|
trap('TERM') do
|
64
|
-
logger.info "Worker received TERM"
|
68
|
+
logger.info "[#{name}] Worker received TERM, stopping"
|
65
69
|
worker.stop
|
66
70
|
exit(0)
|
67
71
|
end
|
@@ -72,11 +76,12 @@ module Pebbles
|
|
72
76
|
|
73
77
|
# From Servolux::Server
|
74
78
|
def before_starting
|
75
|
-
$0 = "#{name}: master"
|
79
|
+
$0 = "#{self.name}: master"
|
76
80
|
|
77
81
|
logger.info "Starting workers"
|
78
|
-
@prefork_pools.each do |prefork|
|
79
|
-
|
82
|
+
@prefork_pools.each do |name, prefork|
|
83
|
+
logger.info "[#{name}] Starting workers"
|
84
|
+
prefork.ensure_worker_pool_size
|
80
85
|
end
|
81
86
|
end
|
82
87
|
|
@@ -92,9 +97,7 @@ module Pebbles
|
|
92
97
|
|
93
98
|
# From Servolux::Server
|
94
99
|
def run
|
95
|
-
|
96
|
-
prefork.ensure_worker_pool_size
|
97
|
-
end
|
100
|
+
ensure_workers
|
98
101
|
rescue => e
|
99
102
|
if logger.respond_to? :exception
|
100
103
|
logger.exception(e)
|
@@ -106,12 +109,51 @@ module Pebbles
|
|
106
109
|
|
107
110
|
private
|
108
111
|
|
112
|
+
def ensure_workers
|
113
|
+
complete = true
|
114
|
+
@prefork_pools.each do |name, prefork|
|
115
|
+
if prefork.below_minimum_workers?
|
116
|
+
complete = false
|
117
|
+
else
|
118
|
+
had_workers = true
|
119
|
+
end
|
120
|
+
|
121
|
+
prefork.prune_workers
|
122
|
+
|
123
|
+
if had_workers and prefork.below_minimum_workers?
|
124
|
+
logger.error "[#{name}] One or more worker died"
|
125
|
+
end
|
126
|
+
|
127
|
+
while prefork.below_minimum_workers? do
|
128
|
+
@recovering = true
|
129
|
+
logger.info "[#{name}] Too few workers (" \
|
130
|
+
"#{prefork.live_worker_count} alive, #{prefork.dead_worker_count} dead), spawning another"
|
131
|
+
prefork.add_workers(1)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
if @recovering and complete
|
136
|
+
@recovering = false
|
137
|
+
logger.info "All workers up"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
109
141
|
def shutdown_workers
|
110
|
-
logger.info "
|
111
|
-
@prefork_pools.each
|
142
|
+
logger.info "Telling all workers to shut down"
|
143
|
+
@prefork_pools.each do |name, prefox|
|
144
|
+
prefox.stop
|
145
|
+
end
|
146
|
+
|
147
|
+
last_logged_time = Time.now
|
112
148
|
loop do
|
113
|
-
|
114
|
-
|
149
|
+
count = @prefork_pools.inject(0) { |sum, (name, prefork)| sum + prefork.live_worker_count }
|
150
|
+
break if count == 0
|
151
|
+
|
152
|
+
if Time.now - last_logged_time > 5
|
153
|
+
logger.info "Still waiting for #{count} workers to quit..."
|
154
|
+
last_logged_time = Time.now
|
155
|
+
end
|
156
|
+
|
115
157
|
sleep 0.25
|
116
158
|
end
|
117
159
|
end
|
data/lib/pebbles/river/worker.rb
CHANGED
@@ -119,7 +119,7 @@ module Pebbles
|
|
119
119
|
|
120
120
|
def process_next
|
121
121
|
with_exceptions do
|
122
|
-
queue.pop(
|
122
|
+
queue.pop(manual_ack: true) do |delivery_info, properties, content|
|
123
123
|
if delivery_info
|
124
124
|
process_message(delivery_info, properties, content)
|
125
125
|
return true
|
data/pebbles-river.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
|
-
spec.add_runtime_dependency 'pebblebed', '
|
23
|
+
spec.add_runtime_dependency 'pebblebed', '>= 0.3.0'
|
24
24
|
spec.add_runtime_dependency 'bunny', '= 1.6.0.rc2'
|
25
25
|
spec.add_runtime_dependency 'activesupport', '>= 3.0'
|
26
26
|
spec.add_runtime_dependency 'servolux', '~> 0.10'
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pebbles-river
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Alexander Staubo
|
@@ -10,28 +9,25 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2015-04-15 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: pebblebed
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - ">="
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: 0.3.0
|
23
21
|
type: :runtime
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
|
-
- -
|
25
|
+
- - ">="
|
29
26
|
- !ruby/object:Gem::Version
|
30
27
|
version: 0.3.0
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
29
|
name: bunny
|
33
30
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
31
|
requirements:
|
36
32
|
- - '='
|
37
33
|
- !ruby/object:Gem::Version
|
@@ -39,7 +35,6 @@ dependencies:
|
|
39
35
|
type: :runtime
|
40
36
|
prerelease: false
|
41
37
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
38
|
requirements:
|
44
39
|
- - '='
|
45
40
|
- !ruby/object:Gem::Version
|
@@ -47,113 +42,99 @@ dependencies:
|
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
43
|
name: activesupport
|
49
44
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
45
|
requirements:
|
52
|
-
- -
|
46
|
+
- - ">="
|
53
47
|
- !ruby/object:Gem::Version
|
54
48
|
version: '3.0'
|
55
49
|
type: :runtime
|
56
50
|
prerelease: false
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
52
|
requirements:
|
60
|
-
- -
|
53
|
+
- - ">="
|
61
54
|
- !ruby/object:Gem::Version
|
62
55
|
version: '3.0'
|
63
56
|
- !ruby/object:Gem::Dependency
|
64
57
|
name: servolux
|
65
58
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
59
|
requirements:
|
68
|
-
- - ~>
|
60
|
+
- - "~>"
|
69
61
|
- !ruby/object:Gem::Version
|
70
62
|
version: '0.10'
|
71
63
|
type: :runtime
|
72
64
|
prerelease: false
|
73
65
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
66
|
requirements:
|
76
|
-
- - ~>
|
67
|
+
- - "~>"
|
77
68
|
- !ruby/object:Gem::Version
|
78
69
|
version: '0.10'
|
79
70
|
- !ruby/object:Gem::Dependency
|
80
71
|
name: mercenary
|
81
72
|
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
73
|
requirements:
|
84
|
-
- - ~>
|
74
|
+
- - "~>"
|
85
75
|
- !ruby/object:Gem::Version
|
86
76
|
version: 0.3.3
|
87
77
|
type: :runtime
|
88
78
|
prerelease: false
|
89
79
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
80
|
requirements:
|
92
|
-
- - ~>
|
81
|
+
- - "~>"
|
93
82
|
- !ruby/object:Gem::Version
|
94
83
|
version: 0.3.3
|
95
84
|
- !ruby/object:Gem::Dependency
|
96
85
|
name: rspec
|
97
86
|
requirement: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
87
|
requirements:
|
100
|
-
- - ~>
|
88
|
+
- - "~>"
|
101
89
|
- !ruby/object:Gem::Version
|
102
90
|
version: '3.0'
|
103
91
|
type: :development
|
104
92
|
prerelease: false
|
105
93
|
version_requirements: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
94
|
requirements:
|
108
|
-
- - ~>
|
95
|
+
- - "~>"
|
109
96
|
- !ruby/object:Gem::Version
|
110
97
|
version: '3.0'
|
111
98
|
- !ruby/object:Gem::Dependency
|
112
99
|
name: bundler
|
113
100
|
requirement: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
101
|
requirements:
|
116
|
-
- - ~>
|
102
|
+
- - "~>"
|
117
103
|
- !ruby/object:Gem::Version
|
118
104
|
version: '1.5'
|
119
105
|
type: :development
|
120
106
|
prerelease: false
|
121
107
|
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
none: false
|
123
108
|
requirements:
|
124
|
-
- - ~>
|
109
|
+
- - "~>"
|
125
110
|
- !ruby/object:Gem::Version
|
126
111
|
version: '1.5'
|
127
112
|
- !ruby/object:Gem::Dependency
|
128
113
|
name: rake
|
129
114
|
requirement: !ruby/object:Gem::Requirement
|
130
|
-
none: false
|
131
115
|
requirements:
|
132
|
-
- -
|
116
|
+
- - ">="
|
133
117
|
- !ruby/object:Gem::Version
|
134
118
|
version: '0'
|
135
119
|
type: :development
|
136
120
|
prerelease: false
|
137
121
|
version_requirements: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
122
|
requirements:
|
140
|
-
- -
|
123
|
+
- - ">="
|
141
124
|
- !ruby/object:Gem::Version
|
142
125
|
version: '0'
|
143
126
|
- !ruby/object:Gem::Dependency
|
144
127
|
name: simplecov
|
145
128
|
requirement: !ruby/object:Gem::Requirement
|
146
|
-
none: false
|
147
129
|
requirements:
|
148
|
-
- -
|
130
|
+
- - ">="
|
149
131
|
- !ruby/object:Gem::Version
|
150
132
|
version: '0'
|
151
133
|
type: :development
|
152
134
|
prerelease: false
|
153
135
|
version_requirements: !ruby/object:Gem::Requirement
|
154
|
-
none: false
|
155
136
|
requirements:
|
156
|
-
- -
|
137
|
+
- - ">="
|
157
138
|
- !ruby/object:Gem::Version
|
158
139
|
version: '0'
|
159
140
|
description: Implements an event river mechanism for Pebblebed.
|
@@ -163,7 +144,7 @@ executables: []
|
|
163
144
|
extensions: []
|
164
145
|
extra_rdoc_files: []
|
165
146
|
files:
|
166
|
-
- .gitignore
|
147
|
+
- ".gitignore"
|
167
148
|
- Gemfile
|
168
149
|
- LICENSE.txt
|
169
150
|
- README.md
|
@@ -189,27 +170,26 @@ files:
|
|
189
170
|
homepage: ''
|
190
171
|
licenses:
|
191
172
|
- MIT
|
173
|
+
metadata: {}
|
192
174
|
post_install_message:
|
193
175
|
rdoc_options: []
|
194
176
|
require_paths:
|
195
177
|
- lib
|
196
178
|
required_ruby_version: !ruby/object:Gem::Requirement
|
197
|
-
none: false
|
198
179
|
requirements:
|
199
|
-
- -
|
180
|
+
- - ">="
|
200
181
|
- !ruby/object:Gem::Version
|
201
182
|
version: '0'
|
202
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
|
-
none: false
|
204
184
|
requirements:
|
205
|
-
- -
|
185
|
+
- - ">="
|
206
186
|
- !ruby/object:Gem::Version
|
207
187
|
version: '0'
|
208
188
|
requirements: []
|
209
189
|
rubyforge_project:
|
210
|
-
rubygems_version:
|
190
|
+
rubygems_version: 2.2.2
|
211
191
|
signing_key:
|
212
|
-
specification_version:
|
192
|
+
specification_version: 4
|
213
193
|
summary: Implements an event river mechanism for Pebblebed.
|
214
194
|
test_files:
|
215
195
|
- spec/lib/river_spec.rb
|
@@ -217,3 +197,4 @@ test_files:
|
|
217
197
|
- spec/lib/subscription_spec.rb
|
218
198
|
- spec/lib/worker_spec.rb
|
219
199
|
- spec/spec_helper.rb
|
200
|
+
has_rdoc:
|