beetle 0.2.0 → 0.2.1
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.
- data/beetle.gemspec +1 -1
- data/lib/beetle/publisher.rb +10 -2
- data/test/beetle/publisher_test.rb +17 -3
- metadata +129 -45
data/beetle.gemspec
CHANGED
data/lib/beetle/publisher.rb
CHANGED
@@ -132,11 +132,16 @@ module Beetle
|
|
132
132
|
b
|
133
133
|
end
|
134
134
|
|
135
|
+
# retry dead servers after ignoring them for 10.seconds
|
136
|
+
# if all servers are dead, retry the one which has been dead for the longest time
|
135
137
|
def recycle_dead_servers
|
136
138
|
recycle = []
|
137
139
|
@dead_servers.each do |s, dead_since|
|
138
140
|
recycle << s if dead_since < 10.seconds.ago
|
139
141
|
end
|
142
|
+
if recycle.empty? && @servers.empty?
|
143
|
+
recycle << @dead_servers.keys.sort_by{|k| @dead_servers[k]}.first
|
144
|
+
end
|
140
145
|
@servers.concat recycle
|
141
146
|
recycle.each {|s| @dead_servers.delete(s)}
|
142
147
|
end
|
@@ -149,8 +154,11 @@ module Beetle
|
|
149
154
|
end
|
150
155
|
|
151
156
|
def select_next_server
|
152
|
-
|
153
|
-
|
157
|
+
if @servers.empty?
|
158
|
+
logger.error("Beetle: no server available")
|
159
|
+
else
|
160
|
+
set_current_server(@servers[((@servers.index(@server) || 0)+1) % @servers.size])
|
161
|
+
end
|
154
162
|
end
|
155
163
|
|
156
164
|
def create_exchange!(name, opts)
|
@@ -284,7 +284,7 @@ module Beetle
|
|
284
284
|
assert_kind_of Time, dead["localhost:2222"]
|
285
285
|
end
|
286
286
|
|
287
|
-
test "recycle_dead_servers should move servers from the dead server hash to the servers list only if
|
287
|
+
test "recycle_dead_servers should move servers from the dead server hash to the servers list only if they have been markd dead for longer than 10 seconds" do
|
288
288
|
@pub.servers = ["a:1", "b:2"]
|
289
289
|
@pub.send(:set_current_server, "a:1")
|
290
290
|
@pub.send(:mark_server_dead)
|
@@ -299,6 +299,19 @@ module Beetle
|
|
299
299
|
assert_equal({}, dead)
|
300
300
|
end
|
301
301
|
|
302
|
+
test "recycle_dead_servers should recycle the server which has been dead for the longest time if all servers are dead " do
|
303
|
+
@pub.servers = ["a:1", "b:2"]
|
304
|
+
@pub.send(:set_current_server, "a:1")
|
305
|
+
@pub.send(:mark_server_dead)
|
306
|
+
@pub.send(:mark_server_dead)
|
307
|
+
assert_equal [], @pub.servers
|
308
|
+
dead = @pub.instance_variable_get("@dead_servers")
|
309
|
+
assert_equal ["a:1", "b:2"], dead.keys.sort
|
310
|
+
@pub.send(:recycle_dead_servers)
|
311
|
+
assert_equal ["b:2"], dead.keys
|
312
|
+
assert_equal ["a:1"], @pub.servers
|
313
|
+
end
|
314
|
+
|
302
315
|
test "select_next_server should cycle through the list of all servers" do
|
303
316
|
@pub.servers = ["a:1", "b:2"]
|
304
317
|
@pub.send(:set_current_server, "a:1")
|
@@ -308,12 +321,13 @@ module Beetle
|
|
308
321
|
assert_equal "a:1", @pub.server
|
309
322
|
end
|
310
323
|
|
311
|
-
test "select_next_server should
|
324
|
+
test "select_next_server should log an error if there are no servers to publish to" do
|
312
325
|
@pub.servers = []
|
313
326
|
logger = mock('logger')
|
314
327
|
logger.expects(:error).returns(true)
|
315
328
|
@pub.expects(:logger).returns(logger)
|
316
|
-
|
329
|
+
@pub.expects(:set_current_server).never
|
330
|
+
@pub.send(:select_next_server)
|
317
331
|
end
|
318
332
|
|
319
333
|
test "stop should shut down all bunnies" do
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beetle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 21
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
- 1
|
10
|
+
version: 0.2.1
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Stefan Kaes
|
@@ -12,109 +18,163 @@ autorequire:
|
|
12
18
|
bindir: bin
|
13
19
|
cert_chain: []
|
14
20
|
|
15
|
-
date: 2010-07-
|
21
|
+
date: 2010-07-22 00:00:00 +02:00
|
16
22
|
default_executable: beetle
|
17
23
|
dependencies:
|
18
24
|
- !ruby/object:Gem::Dependency
|
19
25
|
name: uuid4r
|
20
|
-
|
21
|
-
|
22
|
-
|
26
|
+
prerelease: false
|
27
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
23
29
|
requirements:
|
24
30
|
- - ">="
|
25
31
|
- !ruby/object:Gem::Version
|
32
|
+
hash: 25
|
33
|
+
segments:
|
34
|
+
- 0
|
35
|
+
- 1
|
36
|
+
- 1
|
26
37
|
version: 0.1.1
|
27
|
-
|
38
|
+
type: :runtime
|
39
|
+
version_requirements: *id001
|
28
40
|
- !ruby/object:Gem::Dependency
|
29
41
|
name: bunny
|
30
|
-
|
31
|
-
|
32
|
-
|
42
|
+
prerelease: false
|
43
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
33
45
|
requirements:
|
34
46
|
- - ">="
|
35
47
|
- !ruby/object:Gem::Version
|
48
|
+
hash: 7
|
49
|
+
segments:
|
50
|
+
- 0
|
51
|
+
- 6
|
52
|
+
- 0
|
36
53
|
version: 0.6.0
|
37
|
-
|
54
|
+
type: :runtime
|
55
|
+
version_requirements: *id002
|
38
56
|
- !ruby/object:Gem::Dependency
|
39
57
|
name: redis
|
40
|
-
|
41
|
-
|
42
|
-
|
58
|
+
prerelease: false
|
59
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
43
61
|
requirements:
|
44
62
|
- - ">="
|
45
63
|
- !ruby/object:Gem::Version
|
64
|
+
hash: 9
|
65
|
+
segments:
|
66
|
+
- 2
|
67
|
+
- 0
|
68
|
+
- 3
|
46
69
|
version: 2.0.3
|
47
|
-
|
70
|
+
type: :runtime
|
71
|
+
version_requirements: *id003
|
48
72
|
- !ruby/object:Gem::Dependency
|
49
73
|
name: amqp
|
50
|
-
|
51
|
-
|
52
|
-
|
74
|
+
prerelease: false
|
75
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
53
77
|
requirements:
|
54
78
|
- - ">="
|
55
79
|
- !ruby/object:Gem::Version
|
80
|
+
hash: 9
|
81
|
+
segments:
|
82
|
+
- 0
|
83
|
+
- 6
|
84
|
+
- 7
|
56
85
|
version: 0.6.7
|
57
|
-
|
86
|
+
type: :runtime
|
87
|
+
version_requirements: *id004
|
58
88
|
- !ruby/object:Gem::Dependency
|
59
89
|
name: activesupport
|
60
|
-
|
61
|
-
|
62
|
-
|
90
|
+
prerelease: false
|
91
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
63
93
|
requirements:
|
64
94
|
- - ">="
|
65
95
|
- !ruby/object:Gem::Version
|
96
|
+
hash: 11
|
97
|
+
segments:
|
98
|
+
- 2
|
99
|
+
- 3
|
100
|
+
- 4
|
66
101
|
version: 2.3.4
|
67
|
-
|
102
|
+
type: :runtime
|
103
|
+
version_requirements: *id005
|
68
104
|
- !ruby/object:Gem::Dependency
|
69
105
|
name: daemons
|
70
|
-
|
71
|
-
|
72
|
-
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
73
109
|
requirements:
|
74
110
|
- - ">="
|
75
111
|
- !ruby/object:Gem::Version
|
112
|
+
hash: 3
|
113
|
+
segments:
|
114
|
+
- 1
|
115
|
+
- 0
|
116
|
+
- 10
|
76
117
|
version: 1.0.10
|
77
|
-
|
118
|
+
type: :runtime
|
119
|
+
version_requirements: *id006
|
78
120
|
- !ruby/object:Gem::Dependency
|
79
121
|
name: mocha
|
80
|
-
|
81
|
-
|
82
|
-
|
122
|
+
prerelease: false
|
123
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
124
|
+
none: false
|
83
125
|
requirements:
|
84
126
|
- - ">="
|
85
127
|
- !ruby/object:Gem::Version
|
128
|
+
hash: 3
|
129
|
+
segments:
|
130
|
+
- 0
|
86
131
|
version: "0"
|
87
|
-
|
132
|
+
type: :development
|
133
|
+
version_requirements: *id007
|
88
134
|
- !ruby/object:Gem::Dependency
|
89
135
|
name: rcov
|
90
|
-
|
91
|
-
|
92
|
-
|
136
|
+
prerelease: false
|
137
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
93
139
|
requirements:
|
94
140
|
- - ">="
|
95
141
|
- !ruby/object:Gem::Version
|
142
|
+
hash: 3
|
143
|
+
segments:
|
144
|
+
- 0
|
96
145
|
version: "0"
|
97
|
-
|
146
|
+
type: :development
|
147
|
+
version_requirements: *id008
|
98
148
|
- !ruby/object:Gem::Dependency
|
99
149
|
name: cucumber
|
100
|
-
|
101
|
-
|
102
|
-
|
150
|
+
prerelease: false
|
151
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
152
|
+
none: false
|
103
153
|
requirements:
|
104
154
|
- - ">="
|
105
155
|
- !ruby/object:Gem::Version
|
156
|
+
hash: 7
|
157
|
+
segments:
|
158
|
+
- 0
|
159
|
+
- 7
|
160
|
+
- 2
|
106
161
|
version: 0.7.2
|
107
|
-
|
162
|
+
type: :development
|
163
|
+
version_requirements: *id009
|
108
164
|
- !ruby/object:Gem::Dependency
|
109
165
|
name: daemon_controller
|
110
|
-
|
111
|
-
|
112
|
-
|
166
|
+
prerelease: false
|
167
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
168
|
+
none: false
|
113
169
|
requirements:
|
114
170
|
- - ">="
|
115
171
|
- !ruby/object:Gem::Version
|
172
|
+
hash: 3
|
173
|
+
segments:
|
174
|
+
- 0
|
116
175
|
version: "0"
|
117
|
-
|
176
|
+
type: :development
|
177
|
+
version_requirements: *id010
|
118
178
|
description: A highly available, reliable messaging infrastructure
|
119
179
|
email: developers@xing.com
|
120
180
|
executables:
|
@@ -155,6 +215,22 @@ files:
|
|
155
215
|
- beetle.gemspec
|
156
216
|
- examples/README.rdoc
|
157
217
|
- README.rdoc
|
218
|
+
- test/beetle/base_test.rb
|
219
|
+
- test/beetle/client_test.rb
|
220
|
+
- test/beetle/configuration_test.rb
|
221
|
+
- test/beetle/deduplication_store_test.rb
|
222
|
+
- test/beetle/handler_test.rb
|
223
|
+
- test/beetle/message_test.rb
|
224
|
+
- test/beetle/publisher_test.rb
|
225
|
+
- test/beetle/r_c_test.rb
|
226
|
+
- test/beetle/redis_configuration_client_test.rb
|
227
|
+
- test/beetle/redis_configuration_server_test.rb
|
228
|
+
- test/beetle/redis_ext_test.rb
|
229
|
+
- test/beetle/redis_master_file_test.rb
|
230
|
+
- test/beetle/subscriber_test.rb
|
231
|
+
- test/beetle_test.rb
|
232
|
+
- test/test_helper.rb
|
233
|
+
- bin/beetle
|
158
234
|
has_rdoc: true
|
159
235
|
homepage: http://xing.github.com/beetle/
|
160
236
|
licenses: []
|
@@ -165,21 +241,29 @@ rdoc_options:
|
|
165
241
|
require_paths:
|
166
242
|
- lib
|
167
243
|
required_ruby_version: !ruby/object:Gem::Requirement
|
244
|
+
none: false
|
168
245
|
requirements:
|
169
246
|
- - ">="
|
170
247
|
- !ruby/object:Gem::Version
|
248
|
+
hash: 3
|
249
|
+
segments:
|
250
|
+
- 0
|
171
251
|
version: "0"
|
172
|
-
version:
|
173
252
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
253
|
+
none: false
|
174
254
|
requirements:
|
175
255
|
- - ">="
|
176
256
|
- !ruby/object:Gem::Version
|
257
|
+
hash: 25
|
258
|
+
segments:
|
259
|
+
- 1
|
260
|
+
- 3
|
261
|
+
- 1
|
177
262
|
version: 1.3.1
|
178
|
-
version:
|
179
263
|
requirements: []
|
180
264
|
|
181
265
|
rubyforge_project:
|
182
|
-
rubygems_version: 1.3.
|
266
|
+
rubygems_version: 1.3.7
|
183
267
|
signing_key:
|
184
268
|
specification_version: 3
|
185
269
|
summary: High Availability AMQP Messaging with Redundant Queues
|