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 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