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

Sign up to get free protection for your applications and to get access to all the features.
@@ -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