beetle 0.3.0.rc.2 → 0.3.0.rc.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -58,7 +58,7 @@ windows and execute the following commands:
58
58
 
59
59
  To set up a redundant messaging system you will need
60
60
  * at least 2 AMQP servers (we use {RabbitMQ}[http://www.rabbitmq.com/])
61
- * at least one {Redis}[http://github.com/antirez/redis] server (better are two in a master/slave setup)
61
+ * at least one {Redis}[http://github.com/antirez/redis] server (better are two in a master/slave setup, see REDIS_AUTO_FAILOVER.rdoc)
62
62
 
63
63
  == Gem Dependencies
64
64
 
@@ -1,5 +1,10 @@
1
1
  = Release Notes
2
2
 
3
+ == Version 0.3.0.rc.3
4
+
5
+ * use hiredis as the redis backend, which overcomes lack of proper time-outs in the "generic" redis-rb
6
+ gem for Ruby 1.9
7
+
3
8
  == Version 0.2.9.8
4
9
 
5
10
  * since version 2.0, RabbitMQ supports Basic.reject(:requeue => true). we use it now too,
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "beetle"
3
- s.version = "0.3.0.rc.2"
3
+ s.version = "0.3.0.rc.3"
4
4
  s.required_rubygems_version = ">= 1.3.7"
5
5
  s.authors = ["Stefan Kaes", "Pascal Friederich", "Ali Jelveh", "Sebastian Roebke"]
6
6
  s.date = Time.now.strftime('%Y-%m-%d')
@@ -30,7 +30,8 @@ Gem::Specification.new do |s|
30
30
  s.specification_version = 3
31
31
  s.add_runtime_dependency("uuid4r", [">= 0.1.2"])
32
32
  s.add_runtime_dependency("bunny", ["~> 0.7.1"])
33
- s.add_runtime_dependency("redis", ["= 2.0.4"])
33
+ s.add_runtime_dependency("redis", ["= 2.2.0"])
34
+ s.add_runtime_dependency("hiredis", ["= 0.3.2"])
34
35
  s.add_runtime_dependency("amqp", ["~> 0.6.7"])
35
36
  s.add_runtime_dependency("activesupport", [">= 2.3.4"])
36
37
  s.add_runtime_dependency("daemons", [">= 1.0.10"])
@@ -1,12 +1,26 @@
1
1
  $:.unshift(File.expand_path('..', __FILE__))
2
2
  require 'bunny'
3
3
  require 'uuid4r'
4
+ require 'redis/connection/hiredis' # require *before* redis as specified in the redis-rb gem docs
5
+ require 'redis'
4
6
  require 'active_support'
5
7
  require 'active_support/core_ext'
6
- require 'redis'
7
8
  require 'set'
8
9
 
9
10
  module Beetle
11
+ Timer = if RUBY_VERSION < "1.9"
12
+ begin
13
+ require 'system_timer'
14
+ SystemTimer
15
+ rescue Exception => e
16
+ warn "WARNING: It's highly recommended to install the SystemTimer gem: `gem install SystemTimer -v '=1.2.1'` See: http://ph7spot.com/musings/system-timer" if RUBY_VERSION < "1.9"
17
+ require 'timeout'
18
+ Timeout
19
+ end
20
+ else
21
+ require 'timeout'
22
+ Timeout
23
+ end
10
24
 
11
25
  # abstract superclass for Beetle specific exceptions
12
26
  class Error < StandardError; end
@@ -56,11 +70,4 @@ module Beetle
56
70
  def self.reraise_expectation_errors! #:nodoc:
57
71
  end
58
72
  end
59
-
60
- Timer = begin
61
- RUBY_VERSION < "1.9" ? SystemTimer : Timeout
62
- rescue NameError
63
- warn "WARNING: It's highly recommended to install the SystemTimer gem: `gem install SystemTimer -v '=1.2.1'` See: http://ph7spot.com/musings/system-timer" if RUBY_VERSION < "1.9"
64
- Timeout
65
- end
66
73
  end
@@ -1,8 +1,8 @@
1
1
  module Beetle
2
2
  # A RedisConfigurationServer is the supervisor part of beetle's
3
- # redis failover solution
3
+ # redis failover solution.
4
4
  #
5
- # An single instance of RedisConfigurationServer works as a supervisor for
5
+ # A single instance of RedisConfigurationServer works as a supervisor for
6
6
  # several RedisConfigurationClient instances. It is responsible for watching
7
7
  # the redis master and electing and publishing a new master in case of failure.
8
8
  #
@@ -75,6 +75,7 @@ module Beetle
75
75
  end
76
76
  end
77
77
 
78
+ # called by the message dispatcher when a "client_started" message from a RedisConfigurationClient is received
78
79
  def client_started(payload)
79
80
  id = payload["id"]
80
81
  if client_id_valid?(id)
@@ -186,7 +187,7 @@ module Beetle
186
187
  end
187
188
  known_client
188
189
  end
189
-
190
+
190
191
  def client_id_valid?(client_id)
191
192
  @client_ids.include?(client_id)
192
193
  end
@@ -9,8 +9,8 @@ module Beetle
9
9
  end
10
10
 
11
11
  test "trying to delete a non existent key doesn't throw an error" do
12
- assert !@r.del("hahahaha")
13
12
  assert !@r.exists("hahahaha")
13
+ assert_equal 0, @r.del("hahahaha")
14
14
  end
15
15
 
16
16
  test "msetnx returns 0 or 1" do
@@ -55,11 +55,9 @@ module Beetle
55
55
  end
56
56
  end
57
57
 
58
- class RedisTimeoutTest < Test::Unit::TestCase
59
- test "should use a timer" do
60
- r = Redis.new(:host => "localhost", :port => 6390, :timeout => 1)
61
- r.client.expects(:with_timeout).with(1).raises(Timeout::Error)
62
- assert_equal({}, r.info_with_rescue)
58
+ class HiredisLoadedTest < Test::Unit::TestCase
59
+ test 'should be using hiredis instead of the redis ruby backend' do
60
+ assert defined?(Hiredis)
63
61
  end
64
62
  end
65
63
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beetle
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15424033
4
+ hash: 15424035
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
9
  - 0
10
10
  - rc
11
- - 2
12
- version: 0.3.0.rc.2
11
+ - 3
12
+ version: 0.3.0.rc.3
13
13
  platform: ruby
14
14
  authors:
15
15
  - Stefan Kaes
@@ -20,8 +20,7 @@ autorequire:
20
20
  bindir: bin
21
21
  cert_chain: []
22
22
 
23
- date: 2011-09-14 00:00:00 +02:00
24
- default_executable: beetle
23
+ date: 2011-10-05 00:00:00 Z
25
24
  dependencies:
26
25
  - !ruby/object:Gem::Dependency
27
26
  name: uuid4r
@@ -66,15 +65,31 @@ dependencies:
66
65
  hash: 7
67
66
  segments:
68
67
  - 2
68
+ - 2
69
69
  - 0
70
- - 4
71
- version: 2.0.4
70
+ version: 2.2.0
72
71
  type: :runtime
73
72
  version_requirements: *id003
74
73
  - !ruby/object:Gem::Dependency
75
- name: amqp
74
+ name: hiredis
76
75
  prerelease: false
77
76
  requirement: &id004 !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - "="
80
+ - !ruby/object:Gem::Version
81
+ hash: 23
82
+ segments:
83
+ - 0
84
+ - 3
85
+ - 2
86
+ version: 0.3.2
87
+ type: :runtime
88
+ version_requirements: *id004
89
+ - !ruby/object:Gem::Dependency
90
+ name: amqp
91
+ prerelease: false
92
+ requirement: &id005 !ruby/object:Gem::Requirement
78
93
  none: false
79
94
  requirements:
80
95
  - - ~>
@@ -86,11 +101,11 @@ dependencies:
86
101
  - 7
87
102
  version: 0.6.7
88
103
  type: :runtime
89
- version_requirements: *id004
104
+ version_requirements: *id005
90
105
  - !ruby/object:Gem::Dependency
91
106
  name: activesupport
92
107
  prerelease: false
93
- requirement: &id005 !ruby/object:Gem::Requirement
108
+ requirement: &id006 !ruby/object:Gem::Requirement
94
109
  none: false
95
110
  requirements:
96
111
  - - ">="
@@ -102,11 +117,11 @@ dependencies:
102
117
  - 4
103
118
  version: 2.3.4
104
119
  type: :runtime
105
- version_requirements: *id005
120
+ version_requirements: *id006
106
121
  - !ruby/object:Gem::Dependency
107
122
  name: daemons
108
123
  prerelease: false
109
- requirement: &id006 !ruby/object:Gem::Requirement
124
+ requirement: &id007 !ruby/object:Gem::Requirement
110
125
  none: false
111
126
  requirements:
112
127
  - - ">="
@@ -118,11 +133,11 @@ dependencies:
118
133
  - 10
119
134
  version: 1.0.10
120
135
  type: :runtime
121
- version_requirements: *id006
136
+ version_requirements: *id007
122
137
  - !ruby/object:Gem::Dependency
123
138
  name: rake
124
139
  prerelease: false
125
- requirement: &id007 !ruby/object:Gem::Requirement
140
+ requirement: &id008 !ruby/object:Gem::Requirement
126
141
  none: false
127
142
  requirements:
128
143
  - - ">="
@@ -134,11 +149,11 @@ dependencies:
134
149
  - 7
135
150
  version: 0.8.7
136
151
  type: :development
137
- version_requirements: *id007
152
+ version_requirements: *id008
138
153
  - !ruby/object:Gem::Dependency
139
154
  name: mocha
140
155
  prerelease: false
141
- requirement: &id008 !ruby/object:Gem::Requirement
156
+ requirement: &id009 !ruby/object:Gem::Requirement
142
157
  none: false
143
158
  requirements:
144
159
  - - ">="
@@ -148,11 +163,11 @@ dependencies:
148
163
  - 0
149
164
  version: "0"
150
165
  type: :development
151
- version_requirements: *id008
166
+ version_requirements: *id009
152
167
  - !ruby/object:Gem::Dependency
153
168
  name: rcov
154
169
  prerelease: false
155
- requirement: &id009 !ruby/object:Gem::Requirement
170
+ requirement: &id010 !ruby/object:Gem::Requirement
156
171
  none: false
157
172
  requirements:
158
173
  - - ">="
@@ -162,11 +177,11 @@ dependencies:
162
177
  - 0
163
178
  version: "0"
164
179
  type: :development
165
- version_requirements: *id009
180
+ version_requirements: *id010
166
181
  - !ruby/object:Gem::Dependency
167
182
  name: redgreen
168
183
  prerelease: false
169
- requirement: &id010 !ruby/object:Gem::Requirement
184
+ requirement: &id011 !ruby/object:Gem::Requirement
170
185
  none: false
171
186
  requirements:
172
187
  - - ">="
@@ -176,11 +191,11 @@ dependencies:
176
191
  - 0
177
192
  version: "0"
178
193
  type: :development
179
- version_requirements: *id010
194
+ version_requirements: *id011
180
195
  - !ruby/object:Gem::Dependency
181
196
  name: wirble
182
197
  prerelease: false
183
- requirement: &id011 !ruby/object:Gem::Requirement
198
+ requirement: &id012 !ruby/object:Gem::Requirement
184
199
  none: false
185
200
  requirements:
186
201
  - - ">="
@@ -190,11 +205,11 @@ dependencies:
190
205
  - 0
191
206
  version: "0"
192
207
  type: :development
193
- version_requirements: *id011
208
+ version_requirements: *id012
194
209
  - !ruby/object:Gem::Dependency
195
210
  name: cucumber
196
211
  prerelease: false
197
- requirement: &id012 !ruby/object:Gem::Requirement
212
+ requirement: &id013 !ruby/object:Gem::Requirement
198
213
  none: false
199
214
  requirements:
200
215
  - - ">="
@@ -206,11 +221,11 @@ dependencies:
206
221
  - 2
207
222
  version: 0.7.2
208
223
  type: :development
209
- version_requirements: *id012
224
+ version_requirements: *id013
210
225
  - !ruby/object:Gem::Dependency
211
226
  name: daemon_controller
212
227
  prerelease: false
213
- requirement: &id013 !ruby/object:Gem::Requirement
228
+ requirement: &id014 !ruby/object:Gem::Requirement
214
229
  none: false
215
230
  requirements:
216
231
  - - ">="
@@ -220,7 +235,7 @@ dependencies:
220
235
  - 0
221
236
  version: "0"
222
237
  type: :development
223
- version_requirements: *id013
238
+ version_requirements: *id014
224
239
  description: A highly available, reliable messaging infrastructure
225
240
  email: developers@xing.com
226
241
  executables:
@@ -244,7 +259,6 @@ files:
244
259
  - examples/redundant.rb
245
260
  - examples/rpc.rb
246
261
  - examples/simple.rb
247
- - examples/test_publisher.rb
248
262
  - lib/beetle/base.rb
249
263
  - lib/beetle/client.rb
250
264
  - lib/beetle/commands/configuration_client.rb
@@ -299,7 +313,6 @@ files:
299
313
  - test/beetle_test.rb
300
314
  - test/test_helper.rb
301
315
  - bin/beetle
302
- has_rdoc: true
303
316
  homepage: http://xing.github.com/beetle/
304
317
  licenses: []
305
318
 
@@ -331,7 +344,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
331
344
  requirements: []
332
345
 
333
346
  rubyforge_project:
334
- rubygems_version: 1.6.2
347
+ rubygems_version: 1.8.11
335
348
  signing_key:
336
349
  specification_version: 3
337
350
  summary: High Availability AMQP Messaging with Redundant Queues
@@ -1,32 +0,0 @@
1
- # attempts.rb
2
- # this example shows you how to use the exception limiting feature of beetle
3
- # it allows you to control the number of retries your handler will go through
4
- # with one message before giving up on it
5
- #
6
- # ! check the examples/README.rdoc for information on starting your redis/rabbit !
7
- #
8
- # start it with ruby attempts.rb
9
-
10
- require "rubygems"
11
- require File.expand_path("../lib/beetle", File.dirname(__FILE__))
12
- require "eventmachine"
13
-
14
- # set Beetle log level to info, less noisy than debug
15
- Beetle.config.logger.level = Logger::INFO
16
-
17
- # setup client
18
- client = Beetle::Client.new
19
- client.register_message(:test)
20
-
21
- n = 0
22
- EM.run do
23
- EM.add_periodic_timer(0.1) do
24
- data = (n+=1)
25
- client.logger.info "publishing #{data}"
26
- client.publish(:test, data)
27
- end
28
- trap("INT") do
29
- client.stop_publishing
30
- EM.stop_event_loop
31
- end
32
- end