beetle 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/beetle.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "beetle"
3
- s.version = "0.2.0"
3
+ s.version = "0.2.1"
4
4
 
5
5
  s.required_rubygems_version = ">= 1.3.1"
6
6
  s.authors = ["Stefan Kaes", "Pascal Friederich", "Ali Jelveh", "Sebastian Roebke"]
@@ -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
- return logger.error("Beetle: message could not be delivered - no server available") && 0 if @servers.empty?
153
- set_current_server(@servers[((@servers.index(@server) || 0)+1) % @servers.size])
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 the have been markd dead for longer than 10 seconds" do
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 return 0 if there are no servers to publish to" do
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
- assert_equal 0, @pub.send(:select_next_server)
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
- version: 0.2.0
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-14 00:00:00 +02:00
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
- type: :runtime
21
- version_requirement:
22
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
38
+ type: :runtime
39
+ version_requirements: *id001
28
40
  - !ruby/object:Gem::Dependency
29
41
  name: bunny
30
- type: :runtime
31
- version_requirement:
32
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
54
+ type: :runtime
55
+ version_requirements: *id002
38
56
  - !ruby/object:Gem::Dependency
39
57
  name: redis
40
- type: :runtime
41
- version_requirement:
42
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
70
+ type: :runtime
71
+ version_requirements: *id003
48
72
  - !ruby/object:Gem::Dependency
49
73
  name: amqp
50
- type: :runtime
51
- version_requirement:
52
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
86
+ type: :runtime
87
+ version_requirements: *id004
58
88
  - !ruby/object:Gem::Dependency
59
89
  name: activesupport
60
- type: :runtime
61
- version_requirement:
62
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
102
+ type: :runtime
103
+ version_requirements: *id005
68
104
  - !ruby/object:Gem::Dependency
69
105
  name: daemons
70
- type: :runtime
71
- version_requirement:
72
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
118
+ type: :runtime
119
+ version_requirements: *id006
78
120
  - !ruby/object:Gem::Dependency
79
121
  name: mocha
80
- type: :development
81
- version_requirement:
82
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
132
+ type: :development
133
+ version_requirements: *id007
88
134
  - !ruby/object:Gem::Dependency
89
135
  name: rcov
90
- type: :development
91
- version_requirement:
92
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
146
+ type: :development
147
+ version_requirements: *id008
98
148
  - !ruby/object:Gem::Dependency
99
149
  name: cucumber
100
- type: :development
101
- version_requirement:
102
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
162
+ type: :development
163
+ version_requirements: *id009
108
164
  - !ruby/object:Gem::Dependency
109
165
  name: daemon_controller
110
- type: :development
111
- version_requirement:
112
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
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.5
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