beetle 0.3.0.rc.14 → 0.3.0.rc.15

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.
@@ -5,7 +5,7 @@ end
5
5
 
6
6
  Given /^a redis server "([^\"]*)" exists as slave of "([^\"]*)"$/ do |redis_name, redis_master_name|
7
7
  TestDaemons::Redis[redis_name].start
8
- Given "redis server \"#{redis_name}\" is slave of \"#{redis_master_name}\""
8
+ step "redis server \"#{redis_name}\" is slave of \"#{redis_master_name}\""
9
9
  end
10
10
 
11
11
  Given /^redis server "([^\"]*)" is master$/ do |redis_name|
@@ -117,16 +117,19 @@ module Beetle
117
117
  end
118
118
 
119
119
  def pong!
120
+ logger.info "Sending pong message with id '#{id}' and token '#{@current_token}'"
120
121
  beetle.publish(:pong, {"id" => id, "token" => @current_token}.to_json)
121
122
  end
122
123
 
123
124
  def client_started!
125
+ logger.info "Sending client_started message with id '#{id}'"
124
126
  beetle.publish(:client_started, {"id" => id}.to_json)
125
127
  end
126
128
 
127
129
  def invalidate!
128
130
  @current_master = nil
129
131
  clear_redis_master_file
132
+ logger.info "Sending client_invalidated message with id '#{id}' and token '#{@current_token}'"
130
133
  beetle.publish(:client_invalidated, {"id" => id, "token" => @current_token}.to_json)
131
134
  end
132
135
 
@@ -86,7 +86,7 @@ module Beetle
86
86
  return unless redeem_token(token)
87
87
  @client_pong_ids_received << id
88
88
  if all_client_pong_ids_received?
89
- logger.debug "All client pong messages received"
89
+ logger.info "All client pong messages received"
90
90
  @available_timer.cancel if @available_timer
91
91
  invalidate_current_master
92
92
  end
@@ -96,10 +96,10 @@ module Beetle
96
96
  def client_started(payload)
97
97
  id = payload["id"]
98
98
  if client_id_valid?(id)
99
- logger.info("Received client_started message from id '#{id}'")
99
+ logger.info "Received client_started message from id '#{id}'"
100
100
  else
101
101
  msg = "Received client_started message from unknown id '#{id}'"
102
- logger.error(msg)
102
+ logger.error msg
103
103
  beetle.publish(:system_notification, {"message" => msg}.to_json)
104
104
  end
105
105
  end
@@ -152,7 +152,7 @@ module Beetle
152
152
  def initiate_master_switch
153
153
  redis.refresh
154
154
  available, switch_in_progress = master_available?, paused?
155
- logger.debug "initiating master switch: already in progress = #{switch_in_progress}"
155
+ logger.debug "Initiating master switch: already in progress = #{switch_in_progress}"
156
156
  unless available || switch_in_progress
157
157
  master_unavailable!
158
158
  end
@@ -205,7 +205,7 @@ module Beetle
205
205
  else
206
206
  write_redis_master_file(current_master.server) if @current_master = redis.auto_detect_master
207
207
  end
208
- current_master or raise NoRedisMaster.new("failed to determine initial redis master")
208
+ current_master or raise NoRedisMaster.new("Failed to determine initial redis master")
209
209
  end
210
210
 
211
211
  def determine_new_master
@@ -215,7 +215,8 @@ module Beetle
215
215
  def validate_pong_client_id(client_id)
216
216
  unless known_client = client_id_valid?(client_id)
217
217
  msg = "Received pong message from unknown id '#{client_id}'"
218
- logger.error(msg)
218
+ logger.error msg
219
+ logger.info "Sending system_notification message with text: #{msg}"
219
220
  beetle.publish(:system_notification, {"message" => msg}.to_json)
220
221
  end
221
222
  known_client
@@ -239,12 +240,14 @@ module Beetle
239
240
 
240
241
  def check_all_clients_available
241
242
  generate_new_token
243
+ logger.info "Sending ping message with token '#{@current_token}'"
242
244
  beetle.publish(:ping, payload_with_current_token)
243
245
  @available_timer = EM::Timer.new(config.redis_configuration_client_timeout) { cancel_invalidation }
244
246
  end
245
247
 
246
248
  def invalidate_current_master
247
249
  generate_new_token
250
+ logger.info "Sending invalidate message with token '#{@current_token}'"
248
251
  beetle.publish(:invalidate, payload_with_current_token)
249
252
  @invalidate_timer = EM::Timer.new(config.redis_configuration_client_timeout) { cancel_invalidation }
250
253
  end
@@ -275,7 +278,8 @@ module Beetle
275
278
  def switch_master
276
279
  if new_master = determine_new_master
277
280
  msg = "Setting redis master to '#{new_master.server}' (was '#{current_master.server}')"
278
- logger.warn(msg)
281
+ logger.warn msg
282
+ logger.info "Sending system_notification message with text: #{msg}"
279
283
  beetle.publish(:system_notification, {"message" => msg}.to_json)
280
284
 
281
285
  new_master.master!
@@ -283,7 +287,8 @@ module Beetle
283
287
  @current_master = new_master
284
288
  else
285
289
  msg = "Redis master could not be switched, no slave available to become new master, promoting old master"
286
- logger.error(msg)
290
+ logger.error msg
291
+ logger.info "Sending system_notification message with text: #{msg}"
287
292
  beetle.publish(:system_notification, {"message" => msg}.to_json)
288
293
  end
289
294
 
@@ -292,7 +297,7 @@ module Beetle
292
297
  end
293
298
 
294
299
  def publish_master(master)
295
- logger.info "Publishing reconfigure message with server '#{master.server}'"
300
+ logger.info "Sending reconfigure message with server '#{master.server}'"
296
301
  beetle.publish(:reconfigure, payload_with_current_token({"server" => master.server}))
297
302
  end
298
303
 
@@ -1,3 +1,3 @@
1
1
  module Beetle
2
- VERSION = "0.3.0.rc.14"
2
+ VERSION = "0.3.0.rc.15"
3
3
  end
@@ -303,38 +303,26 @@ module Beetle
303
303
  end
304
304
  end
305
305
 
306
- class RedisConfigurationServerSystemNotificationAndLoggingTest < Test::Unit::TestCase
306
+ class RedisConfigurationServerSystemNotificationTest < Test::Unit::TestCase
307
307
  def setup
308
308
  Beetle.config.redis_configuration_client_ids = "rc-client-1,rc-client-2"
309
309
  @server = RedisConfigurationServer.new
310
310
  @server.stubs(:beetle).returns(stub(:publish))
311
- @server.stubs(:logger).returns(stub)
312
311
  EventMachine.stubs(:add_timer).yields
313
312
  end
314
313
 
315
- test "should log and send a system notification when pong message from unknown client received" do
314
+ test "should send a system notification when receiving pong message from unknown client" do
316
315
  payload = {"id" => "unknown-client", "token" => @server.current_token}
317
316
  msg = "Received pong message from unknown id 'unknown-client'"
318
317
  @server.beetle.expects(:publish).with(:system_notification, ({:message => msg}).to_json)
319
- @server.logger.expects(:error).with(msg)
320
318
  @server.pong(payload)
321
319
  end
322
320
 
323
- test "should warn about unknown clients when receiving client_started messages" do
321
+ test "should send a system notification when receiving client_started message from unknown client" do
324
322
  payload = {"id" => "unknown-client"}
325
323
  msg = "Received client_started message from unknown id 'unknown-client'"
326
324
  @server.beetle.expects(:publish).with(:system_notification, ({:message => msg}).to_json)
327
- @server.logger.expects(:error).with(msg)
328
325
  @server.client_started(payload)
329
326
  end
330
-
331
- test "should log an info about received client_started client_started messages" do
332
- payload = {"id" => "known-client"}
333
- msg = "Received client_started message from id 'known-client'"
334
- @server.logger.expects(:info).with(msg)
335
- @server.expects(:client_id_valid?).with('known-client').returns(true)
336
- @server.client_started(payload)
337
- end
338
-
339
327
  end
340
328
  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: -3659944352
4
+ hash: -946228374
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
9
  - 0
10
10
  - rc
11
- - 14
12
- version: 0.3.0.rc.14
11
+ - 15
12
+ version: 0.3.0.rc.15
13
13
  platform: ruby
14
14
  authors:
15
15
  - Stefan Kaes
@@ -21,11 +21,9 @@ autorequire:
21
21
  bindir: bin
22
22
  cert_chain: []
23
23
 
24
- date: 2012-07-01 00:00:00 Z
24
+ date: 2012-07-23 00:00:00 Z
25
25
  dependencies:
26
26
  - !ruby/object:Gem::Dependency
27
- name: uuid4r
28
- prerelease: false
29
27
  requirement: &id001 !ruby/object:Gem::Requirement
30
28
  none: false
31
29
  requirements:
@@ -37,11 +35,11 @@ dependencies:
37
35
  - 1
38
36
  - 2
39
37
  version: 0.1.2
40
- type: :runtime
41
38
  version_requirements: *id001
42
- - !ruby/object:Gem::Dependency
43
- name: bunny
44
39
  prerelease: false
40
+ type: :runtime
41
+ name: uuid4r
42
+ - !ruby/object:Gem::Dependency
45
43
  requirement: &id002 !ruby/object:Gem::Requirement
46
44
  none: false
47
45
  requirements:
@@ -53,11 +51,11 @@ dependencies:
53
51
  - 7
54
52
  - 9
55
53
  version: 0.7.9
56
- type: :runtime
57
54
  version_requirements: *id002
58
- - !ruby/object:Gem::Dependency
59
- name: redis
60
55
  prerelease: false
56
+ type: :runtime
57
+ name: bunny
58
+ - !ruby/object:Gem::Dependency
61
59
  requirement: &id003 !ruby/object:Gem::Requirement
62
60
  none: false
63
61
  requirements:
@@ -69,11 +67,11 @@ dependencies:
69
67
  - 0
70
68
  - 1
71
69
  version: 3.0.1
72
- type: :runtime
73
70
  version_requirements: *id003
74
- - !ruby/object:Gem::Dependency
75
- name: hiredis
76
71
  prerelease: false
72
+ type: :runtime
73
+ name: redis
74
+ - !ruby/object:Gem::Dependency
77
75
  requirement: &id004 !ruby/object:Gem::Requirement
78
76
  none: false
79
77
  requirements:
@@ -85,11 +83,11 @@ dependencies:
85
83
  - 4
86
84
  - 5
87
85
  version: 0.4.5
88
- type: :runtime
89
86
  version_requirements: *id004
90
- - !ruby/object:Gem::Dependency
91
- name: amq-client
92
87
  prerelease: false
88
+ type: :runtime
89
+ name: hiredis
90
+ - !ruby/object:Gem::Dependency
93
91
  requirement: &id005 !ruby/object:Gem::Requirement
94
92
  none: false
95
93
  requirements:
@@ -101,11 +99,11 @@ dependencies:
101
99
  - 9
102
100
  - 3
103
101
  version: 0.9.3
104
- type: :runtime
105
102
  version_requirements: *id005
106
- - !ruby/object:Gem::Dependency
107
- name: amq-protocol
108
103
  prerelease: false
104
+ type: :runtime
105
+ name: amq-client
106
+ - !ruby/object:Gem::Dependency
109
107
  requirement: &id006 !ruby/object:Gem::Requirement
110
108
  none: false
111
109
  requirements:
@@ -117,11 +115,11 @@ dependencies:
117
115
  - 9
118
116
  - 3
119
117
  version: 0.9.3
120
- type: :runtime
121
118
  version_requirements: *id006
122
- - !ruby/object:Gem::Dependency
123
- name: amqp
124
119
  prerelease: false
120
+ type: :runtime
121
+ name: amq-protocol
122
+ - !ruby/object:Gem::Dependency
125
123
  requirement: &id007 !ruby/object:Gem::Requirement
126
124
  none: false
127
125
  requirements:
@@ -133,11 +131,11 @@ dependencies:
133
131
  - 9
134
132
  - 6
135
133
  version: 0.9.6
136
- type: :runtime
137
134
  version_requirements: *id007
138
- - !ruby/object:Gem::Dependency
139
- name: activesupport
140
135
  prerelease: false
136
+ type: :runtime
137
+ name: amqp
138
+ - !ruby/object:Gem::Dependency
141
139
  requirement: &id008 !ruby/object:Gem::Requirement
142
140
  none: false
143
141
  requirements:
@@ -149,11 +147,11 @@ dependencies:
149
147
  - 3
150
148
  - 4
151
149
  version: 2.3.4
152
- type: :runtime
153
150
  version_requirements: *id008
154
- - !ruby/object:Gem::Dependency
155
- name: eventmachine_httpserver
156
151
  prerelease: false
152
+ type: :runtime
153
+ name: activesupport
154
+ - !ruby/object:Gem::Dependency
157
155
  requirement: &id009 !ruby/object:Gem::Requirement
158
156
  none: false
159
157
  requirements:
@@ -165,11 +163,11 @@ dependencies:
165
163
  - 2
166
164
  - 1
167
165
  version: 0.2.1
168
- type: :runtime
169
166
  version_requirements: *id009
170
- - !ruby/object:Gem::Dependency
171
- name: daemons
172
167
  prerelease: false
168
+ type: :runtime
169
+ name: eventmachine_httpserver
170
+ - !ruby/object:Gem::Dependency
173
171
  requirement: &id010 !ruby/object:Gem::Requirement
174
172
  none: false
175
173
  requirements:
@@ -181,8 +179,10 @@ dependencies:
181
179
  - 0
182
180
  - 10
183
181
  version: 1.0.10
184
- type: :runtime
185
182
  version_requirements: *id010
183
+ prerelease: false
184
+ type: :runtime
185
+ name: daemons
186
186
  description: A highly available, reliable messaging infrastructure
187
187
  email: opensource@xing.com
188
188
  executables:
@@ -207,7 +207,6 @@ files:
207
207
  - examples/redundant.rb
208
208
  - examples/rpc.rb
209
209
  - examples/simple.rb
210
- - examples/test_publisher.rb
211
210
  - lib/beetle/base.rb
212
211
  - lib/beetle/client.rb
213
212
  - lib/beetle/commands/configuration_client.rb
@@ -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