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

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