beetle 0.3.0.rc.4 → 0.3.0.rc.6

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,13 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "beetle/version"
4
+
1
5
  Gem::Specification.new do |s|
2
6
  s.name = "beetle"
3
- s.version = "0.3.0.rc.4"
7
+ s.version = Beetle::VERSION
4
8
  s.required_rubygems_version = ">= 1.3.7"
5
- s.authors = ["Stefan Kaes", "Pascal Friederich", "Ali Jelveh", "Sebastian Roebke"]
9
+ s.authors = ["Stefan Kaes", "Pascal Friederich", "Ali Jelveh", "Sebastian Roebke", "Larry Baltz"]
6
10
  s.date = Time.now.strftime('%Y-%m-%d')
7
11
  s.default_executable = "beetle"
8
12
  s.description = "A highly available, reliable messaging infrastructure"
9
13
  s.summary = "High Availability AMQP Messaging with Redundant Queues"
10
- s.email = "developers@xing.com"
14
+ s.email = "opensource@xing.com"
11
15
  s.executables = ["beetle"]
12
16
  s.extra_rdoc_files = Dir['**/*.rdoc'] + %w(MIT-LICENSE)
13
17
  s.files = Dir['{examples,lib}/**/*.rb'] + Dir['{features,script}/**/*'] + %w(beetle.gemspec Rakefile)
@@ -30,7 +34,7 @@ Gem::Specification.new do |s|
30
34
  s.specification_version = 3
31
35
  s.add_runtime_dependency("uuid4r", [">= 0.1.2"])
32
36
  s.add_runtime_dependency("bunny", ["= 0.7.8"])
33
- s.add_runtime_dependency("redis", ["= 2.2.0"])
37
+ s.add_runtime_dependency("redis", ["= 2.2.2"])
34
38
  s.add_runtime_dependency("hiredis", ["= 0.3.2"])
35
39
  s.add_runtime_dependency("amq-client", ["= 0.8.3"])
36
40
  s.add_runtime_dependency("amq-protocol", ["= 0.8.1"])
@@ -40,8 +44,6 @@ Gem::Specification.new do |s|
40
44
  s.add_development_dependency("rake", [">= 0.8.7"])
41
45
  s.add_development_dependency("mocha", [">= 0"])
42
46
  s.add_development_dependency("rcov", [">= 0"])
43
- s.add_development_dependency("redgreen", [">= 0"])
44
- s.add_development_dependency("wirble", [">= 0"])
45
47
  s.add_development_dependency("cucumber", [">= 0.7.2"])
46
48
  s.add_development_dependency("daemon_controller", [">= 0"])
47
49
  end
@@ -39,7 +39,7 @@ module TestDaemons
39
39
  end
40
40
 
41
41
  def restart(delay=1)
42
- redis.shutdown rescue Errno::ECONNREFUSED
42
+ redis.shutdown
43
43
  sleep delay
44
44
  `redis-server #{config_filename}`
45
45
  end
data/lib/beetle.rb CHANGED
@@ -6,6 +6,7 @@ require 'redis'
6
6
  require 'active_support'
7
7
  require 'active_support/core_ext'
8
8
  require 'set'
9
+ require 'socket'
9
10
 
10
11
  module Beetle
11
12
  Timer = if RUBY_VERSION < "1.9"
@@ -46,6 +47,13 @@ module Beetle
46
47
  # AMQP options for subscribing to queues
47
48
  SUBSCRIPTION_KEYS = [:ack, :key]
48
49
 
50
+ # determine the fully qualified domainname of the host we're running on
51
+ def self.hostname
52
+ name = Socket.gethostname
53
+ parts = name.split('.')
54
+ parts.size > 1 ? name : Socket.gethostbyname(parts.first).first
55
+ end
56
+
49
57
  # use ruby's autoload mechanism for loading beetle classes
50
58
  lib_dir = File.expand_path(File.dirname(__FILE__) + '/beetle/')
51
59
  Dir["#{lib_dir}/*.rb"].each do |libfile|
data/lib/beetle/client.rb CHANGED
@@ -289,7 +289,7 @@ module Beetle
289
289
  end
290
290
 
291
291
  def queue_name_for_tracing(queue)
292
- "trace-#{queue}-#{`hostname`.chomp}-#{$$}"
292
+ "trace-#{queue}-#{Beetle.hostname}-#{$$}"
293
293
  end
294
294
  end
295
295
  end
@@ -25,7 +25,7 @@ module Beetle
25
25
 
26
26
  # Unique id for this instance (defaults to the fully qualified hostname)
27
27
  def id
28
- @id ||= `hostname -f`.chomp
28
+ @id ||= Beetle.hostname
29
29
  end
30
30
 
31
31
  def initialize #:nodoc:
@@ -50,4 +50,23 @@ class Redis #:nodoc:
50
50
  info = info_with_rescue
51
51
  info["role"] == "slave" && info["master_host"] == host && info["master_port"] == port.to_s
52
52
  end
53
+
54
+ # redis 2.2.2 shutdown implementation does not disconnect from the redis server.
55
+ # this leaves the connection in an inconsistent state and causes the next command to silently fail.
56
+ # this in turn breaks our cucumber test scenarios.
57
+ # fix this here, until a new version is released which fixes the problem.
58
+
59
+ alias_method :broken_shutdown, :shutdown
60
+
61
+ # Synchronously save the dataset to disk and then shut down the server.
62
+ def shutdown
63
+ synchronize do
64
+ begin
65
+ @client.call_without_reply [:shutdown]
66
+ ensure
67
+ @client.disconnect
68
+ end
69
+ end
70
+ end
71
+
53
72
  end
@@ -0,0 +1,3 @@
1
+ module Beetle
2
+ VERSION = "0.3.0.rc.6"
3
+ end
@@ -60,4 +60,19 @@ module Beetle
60
60
  assert defined?(Hiredis)
61
61
  end
62
62
  end
63
+
64
+ class BrokenRedisShutdownTest < Test::Unit::TestCase
65
+ def setup
66
+ @r = Redis.new(:host => "localhost", :port => 6390)
67
+ end
68
+
69
+ # if this test fails after upgrading redis, we can probably remove
70
+ # our custom shutdown method from redis_ext.rb
71
+ test "redis shutdown implementation is broken" do
72
+ @r.client.expects(:call_without_reply).with([:shutdown]).once
73
+ @r.client.expects(:disconnect).never
74
+ @r.broken_shutdown
75
+ end
76
+ end
77
+
63
78
  end
metadata CHANGED
@@ -1,288 +1,188 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: beetle
3
- version: !ruby/object:Gem::Version
4
- hash: 15424045
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0.rc.6
5
5
  prerelease: 6
6
- segments:
7
- - 0
8
- - 3
9
- - 0
10
- - rc
11
- - 4
12
- version: 0.3.0.rc.4
13
6
  platform: ruby
14
- authors:
7
+ authors:
15
8
  - Stefan Kaes
16
9
  - Pascal Friederich
17
10
  - Ali Jelveh
18
11
  - Sebastian Roebke
12
+ - Larry Baltz
19
13
  autorequire:
20
14
  bindir: bin
21
15
  cert_chain: []
22
-
23
- date: 2011-10-11 00:00:00 +02:00
16
+ date: 2011-10-22 00:00:00.000000000 +02:00
24
17
  default_executable: beetle
25
- dependencies:
26
- - !ruby/object:Gem::Dependency
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
27
20
  name: uuid4r
28
- prerelease: false
29
- requirement: &id001 !ruby/object:Gem::Requirement
21
+ requirement: &2151634120 !ruby/object:Gem::Requirement
30
22
  none: false
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- hash: 31
35
- segments:
36
- - 0
37
- - 1
38
- - 2
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
39
26
  version: 0.1.2
40
27
  type: :runtime
41
- version_requirements: *id001
42
- - !ruby/object:Gem::Dependency
43
- name: bunny
44
28
  prerelease: false
45
- requirement: &id002 !ruby/object:Gem::Requirement
29
+ version_requirements: *2151634120
30
+ - !ruby/object:Gem::Dependency
31
+ name: bunny
32
+ requirement: &2151633580 !ruby/object:Gem::Requirement
46
33
  none: false
47
- requirements:
48
- - - "="
49
- - !ruby/object:Gem::Version
50
- hash: 19
51
- segments:
52
- - 0
53
- - 7
54
- - 8
34
+ requirements:
35
+ - - =
36
+ - !ruby/object:Gem::Version
55
37
  version: 0.7.8
56
38
  type: :runtime
57
- version_requirements: *id002
58
- - !ruby/object:Gem::Dependency
59
- name: redis
60
39
  prerelease: false
61
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: *2151633580
41
+ - !ruby/object:Gem::Dependency
42
+ name: redis
43
+ requirement: &2151633100 !ruby/object:Gem::Requirement
62
44
  none: false
63
- requirements:
64
- - - "="
65
- - !ruby/object:Gem::Version
66
- hash: 7
67
- segments:
68
- - 2
69
- - 2
70
- - 0
71
- version: 2.2.0
45
+ requirements:
46
+ - - =
47
+ - !ruby/object:Gem::Version
48
+ version: 2.2.2
72
49
  type: :runtime
73
- version_requirements: *id003
74
- - !ruby/object:Gem::Dependency
75
- name: hiredis
76
50
  prerelease: false
77
- requirement: &id004 !ruby/object:Gem::Requirement
51
+ version_requirements: *2151633100
52
+ - !ruby/object:Gem::Dependency
53
+ name: hiredis
54
+ requirement: &2151632560 !ruby/object:Gem::Requirement
78
55
  none: false
79
- requirements:
80
- - - "="
81
- - !ruby/object:Gem::Version
82
- hash: 23
83
- segments:
84
- - 0
85
- - 3
86
- - 2
56
+ requirements:
57
+ - - =
58
+ - !ruby/object:Gem::Version
87
59
  version: 0.3.2
88
60
  type: :runtime
89
- version_requirements: *id004
90
- - !ruby/object:Gem::Dependency
91
- name: amq-client
92
61
  prerelease: false
93
- requirement: &id005 !ruby/object:Gem::Requirement
62
+ version_requirements: *2151632560
63
+ - !ruby/object:Gem::Dependency
64
+ name: amq-client
65
+ requirement: &2151632020 !ruby/object:Gem::Requirement
94
66
  none: false
95
- requirements:
96
- - - "="
97
- - !ruby/object:Gem::Version
98
- hash: 57
99
- segments:
100
- - 0
101
- - 8
102
- - 3
67
+ requirements:
68
+ - - =
69
+ - !ruby/object:Gem::Version
103
70
  version: 0.8.3
104
71
  type: :runtime
105
- version_requirements: *id005
106
- - !ruby/object:Gem::Dependency
107
- name: amq-protocol
108
72
  prerelease: false
109
- requirement: &id006 !ruby/object:Gem::Requirement
73
+ version_requirements: *2151632020
74
+ - !ruby/object:Gem::Dependency
75
+ name: amq-protocol
76
+ requirement: &2151631540 !ruby/object:Gem::Requirement
110
77
  none: false
111
- requirements:
112
- - - "="
113
- - !ruby/object:Gem::Version
114
- hash: 61
115
- segments:
116
- - 0
117
- - 8
118
- - 1
78
+ requirements:
79
+ - - =
80
+ - !ruby/object:Gem::Version
119
81
  version: 0.8.1
120
82
  type: :runtime
121
- version_requirements: *id006
122
- - !ruby/object:Gem::Dependency
123
- name: amqp
124
83
  prerelease: false
125
- requirement: &id007 !ruby/object:Gem::Requirement
84
+ version_requirements: *2151631540
85
+ - !ruby/object:Gem::Dependency
86
+ name: amqp
87
+ requirement: &2151631000 !ruby/object:Gem::Requirement
126
88
  none: false
127
- requirements:
128
- - - "="
129
- - !ruby/object:Gem::Version
130
- hash: 63
131
- segments:
132
- - 0
133
- - 8
134
- - 0
89
+ requirements:
90
+ - - =
91
+ - !ruby/object:Gem::Version
135
92
  version: 0.8.0
136
93
  type: :runtime
137
- version_requirements: *id007
138
- - !ruby/object:Gem::Dependency
139
- name: activesupport
140
94
  prerelease: false
141
- requirement: &id008 !ruby/object:Gem::Requirement
95
+ version_requirements: *2151631000
96
+ - !ruby/object:Gem::Dependency
97
+ name: activesupport
98
+ requirement: &2151630480 !ruby/object:Gem::Requirement
142
99
  none: false
143
- requirements:
144
- - - ">="
145
- - !ruby/object:Gem::Version
146
- hash: 11
147
- segments:
148
- - 2
149
- - 3
150
- - 4
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
151
103
  version: 2.3.4
152
104
  type: :runtime
153
- version_requirements: *id008
154
- - !ruby/object:Gem::Dependency
155
- name: daemons
156
105
  prerelease: false
157
- requirement: &id009 !ruby/object:Gem::Requirement
106
+ version_requirements: *2151630480
107
+ - !ruby/object:Gem::Dependency
108
+ name: daemons
109
+ requirement: &2151629940 !ruby/object:Gem::Requirement
158
110
  none: false
159
- requirements:
160
- - - ">="
161
- - !ruby/object:Gem::Version
162
- hash: 3
163
- segments:
164
- - 1
165
- - 0
166
- - 10
111
+ requirements:
112
+ - - ! '>='
113
+ - !ruby/object:Gem::Version
167
114
  version: 1.0.10
168
115
  type: :runtime
169
- version_requirements: *id009
170
- - !ruby/object:Gem::Dependency
171
- name: rake
172
116
  prerelease: false
173
- requirement: &id010 !ruby/object:Gem::Requirement
117
+ version_requirements: *2151629940
118
+ - !ruby/object:Gem::Dependency
119
+ name: rake
120
+ requirement: &2151629420 !ruby/object:Gem::Requirement
174
121
  none: false
175
- requirements:
176
- - - ">="
177
- - !ruby/object:Gem::Version
178
- hash: 49
179
- segments:
180
- - 0
181
- - 8
182
- - 7
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
183
125
  version: 0.8.7
184
126
  type: :development
185
- version_requirements: *id010
186
- - !ruby/object:Gem::Dependency
187
- name: mocha
188
- prerelease: false
189
- requirement: &id011 !ruby/object:Gem::Requirement
190
- none: false
191
- requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- hash: 3
195
- segments:
196
- - 0
197
- version: "0"
198
- type: :development
199
- version_requirements: *id011
200
- - !ruby/object:Gem::Dependency
201
- name: rcov
202
127
  prerelease: false
203
- requirement: &id012 !ruby/object:Gem::Requirement
128
+ version_requirements: *2151629420
129
+ - !ruby/object:Gem::Dependency
130
+ name: mocha
131
+ requirement: &2151628940 !ruby/object:Gem::Requirement
204
132
  none: false
205
- requirements:
206
- - - ">="
207
- - !ruby/object:Gem::Version
208
- hash: 3
209
- segments:
210
- - 0
211
- version: "0"
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
212
137
  type: :development
213
- version_requirements: *id012
214
- - !ruby/object:Gem::Dependency
215
- name: redgreen
216
138
  prerelease: false
217
- requirement: &id013 !ruby/object:Gem::Requirement
139
+ version_requirements: *2151628940
140
+ - !ruby/object:Gem::Dependency
141
+ name: rcov
142
+ requirement: &2151628460 !ruby/object:Gem::Requirement
218
143
  none: false
219
- requirements:
220
- - - ">="
221
- - !ruby/object:Gem::Version
222
- hash: 3
223
- segments:
224
- - 0
225
- version: "0"
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
226
148
  type: :development
227
- version_requirements: *id013
228
- - !ruby/object:Gem::Dependency
229
- name: wirble
230
149
  prerelease: false
231
- requirement: &id014 !ruby/object:Gem::Requirement
232
- none: false
233
- requirements:
234
- - - ">="
235
- - !ruby/object:Gem::Version
236
- hash: 3
237
- segments:
238
- - 0
239
- version: "0"
240
- type: :development
241
- version_requirements: *id014
242
- - !ruby/object:Gem::Dependency
150
+ version_requirements: *2151628460
151
+ - !ruby/object:Gem::Dependency
243
152
  name: cucumber
244
- prerelease: false
245
- requirement: &id015 !ruby/object:Gem::Requirement
153
+ requirement: &2151627860 !ruby/object:Gem::Requirement
246
154
  none: false
247
- requirements:
248
- - - ">="
249
- - !ruby/object:Gem::Version
250
- hash: 7
251
- segments:
252
- - 0
253
- - 7
254
- - 2
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
255
158
  version: 0.7.2
256
159
  type: :development
257
- version_requirements: *id015
258
- - !ruby/object:Gem::Dependency
259
- name: daemon_controller
260
160
  prerelease: false
261
- requirement: &id016 !ruby/object:Gem::Requirement
161
+ version_requirements: *2151627860
162
+ - !ruby/object:Gem::Dependency
163
+ name: daemon_controller
164
+ requirement: &2151627360 !ruby/object:Gem::Requirement
262
165
  none: false
263
- requirements:
264
- - - ">="
265
- - !ruby/object:Gem::Version
266
- hash: 3
267
- segments:
268
- - 0
269
- version: "0"
166
+ requirements:
167
+ - - ! '>='
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
270
170
  type: :development
271
- version_requirements: *id016
171
+ prerelease: false
172
+ version_requirements: *2151627360
272
173
  description: A highly available, reliable messaging infrastructure
273
- email: developers@xing.com
274
- executables:
174
+ email: opensource@xing.com
175
+ executables:
275
176
  - beetle
276
177
  extensions: []
277
-
278
- extra_rdoc_files:
178
+ extra_rdoc_files:
279
179
  - examples/README.rdoc
280
180
  - features/README.rdoc
281
181
  - README.rdoc
282
182
  - REDIS_AUTO_FAILOVER.rdoc
283
183
  - RELEASE_NOTES.rdoc
284
184
  - MIT-LICENSE
285
- files:
185
+ files:
286
186
  - examples/attempts.rb
287
187
  - examples/handler_class.rb
288
188
  - examples/handling_exceptions.rb
@@ -311,6 +211,7 @@ files:
311
211
  - lib/beetle/redis_master_file.rb
312
212
  - lib/beetle/redis_server_info.rb
313
213
  - lib/beetle/subscriber.rb
214
+ - lib/beetle/version.rb
314
215
  - lib/beetle.rb
315
216
  - features/README.rdoc
316
217
  - features/redis_auto_failover.feature
@@ -353,40 +254,33 @@ files:
353
254
  has_rdoc: true
354
255
  homepage: http://xing.github.com/beetle/
355
256
  licenses: []
356
-
357
- post_install_message: " *********************************************************************************************\n\n Please install the SystemTimer gem if you're running a ruby version < 1.9:\n `gem install SystemTimer -v '=1.2.1'`\n See: http://ph7spot.com/musings/system-timer\n\n *********************************************************************************************\n"
358
- rdoc_options:
257
+ post_install_message: ! " *********************************************************************************************\n\n
258
+ \ Please install the SystemTimer gem if you're running a ruby version < 1.9:\n
259
+ \ `gem install SystemTimer -v '=1.2.1'`\n See: http://ph7spot.com/musings/system-timer\n\n
260
+ \ *********************************************************************************************\n"
261
+ rdoc_options:
359
262
  - --charset=UTF-8
360
- require_paths:
263
+ require_paths:
361
264
  - lib
362
- required_ruby_version: !ruby/object:Gem::Requirement
265
+ required_ruby_version: !ruby/object:Gem::Requirement
363
266
  none: false
364
- requirements:
365
- - - ">="
366
- - !ruby/object:Gem::Version
367
- hash: 3
368
- segments:
369
- - 0
370
- version: "0"
371
- required_rubygems_version: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - ! '>='
269
+ - !ruby/object:Gem::Version
270
+ version: '0'
271
+ required_rubygems_version: !ruby/object:Gem::Requirement
372
272
  none: false
373
- requirements:
374
- - - ">="
375
- - !ruby/object:Gem::Version
376
- hash: 21
377
- segments:
378
- - 1
379
- - 3
380
- - 7
273
+ requirements:
274
+ - - ! '>='
275
+ - !ruby/object:Gem::Version
381
276
  version: 1.3.7
382
277
  requirements: []
383
-
384
278
  rubyforge_project:
385
279
  rubygems_version: 1.6.2
386
280
  signing_key:
387
281
  specification_version: 3
388
282
  summary: High Availability AMQP Messaging with Redundant Queues
389
- test_files:
283
+ test_files:
390
284
  - test/beetle/amqp_gem_behavior_test.rb
391
285
  - test/beetle/base_test.rb
392
286
  - test/beetle/client_test.rb