majordomo 0.0.3 → 0.0.4

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.
@@ -1,3 +1,3 @@
1
1
  module Majordomo
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -25,12 +25,11 @@ class Majordomo::Worker
25
25
 
26
26
  # Return address, if any
27
27
  @reply_to = nil
28
-
28
+
29
29
  @broker = broker
30
30
  @service = service
31
31
  @verbose = verbose
32
32
  @ctx = ZMQ::Context.new
33
- @poller = ZMQ::Poller.new
34
33
 
35
34
  reconnect_to_broker
36
35
  end
@@ -55,20 +54,27 @@ class Majordomo::Worker
55
54
  rescue => e
56
55
  break # Interrupted
57
56
  end
58
- if items
57
+ case items
58
+ when 0
59
+ # nothing waiting, but not an error
60
+ log "timed out on poll, reducing liveness"
61
+ reduce_liveness
62
+ when -1
63
+ msg = "error polling socket: errno is #{ZMQ::Util.error_string}"
64
+ log msg
65
+ raise msg
66
+ else
59
67
  if (result = handle_message)
60
-
61
68
  log "result from handle_message: |#{result}|"
62
69
  return result
63
70
  end
64
- else
65
- reduce_liveness
66
71
  end
67
72
  # Send HEARTBEAT if it's time
68
73
  if Time.now > @heartbeat_at
69
74
  send_to_broker(Majordomo::W_HEARTBEAT)
70
75
  @heartbeat_at = Time.now + 1e-3*@heartbeat
71
76
  end
77
+
72
78
  end
73
79
  log "W: interrupt received, killing worker…"
74
80
  return nil
@@ -78,14 +84,18 @@ class Majordomo::Worker
78
84
 
79
85
  def reconnect_to_broker
80
86
  if @worker
81
- @poller.unregister(@worker)
87
+ @poller.deregister_readable @worker
82
88
  @worker.close
83
89
  end
90
+ # for some reason, if we don't register a new poller,
91
+ # we get an error on the next poll. Very mysterious, and this
92
+ # solution is decidedly suboptimal. FIX
93
+ @poller = ZMQ::Poller.new
84
94
  @worker = @ctx.socket(ZMQ::DEALER)
85
95
 
86
96
  @worker.setsockopt(ZMQ::LINGER, 0)
87
97
  @worker.connect @broker
88
- @poller.register @worker, ZMQ::POLLIN
98
+ @poller.register_readable @worker
89
99
  log "I: connecting to broker at #{@broker}…"
90
100
  # Register service with broker
91
101
  send_to_broker Majordomo::W_READY, @service, []
@@ -116,10 +126,11 @@ class Majordomo::Worker
116
126
 
117
127
  def handle_message
118
128
  msg = []
129
+
119
130
  @worker.recv_strings(msg)
120
131
  log "I: received message from broker: #{msg} "
121
132
 
122
- @liveness = @HEARTBEAT_LIVENESS
133
+ @liveness = HEARTBEAT_LIVENESS
123
134
  # Don't try to handle errors, just assert noisily
124
135
  raise "expected at least 3 parts" unless msg.length >= 3
125
136
  log "full message: #{msg}"
@@ -138,13 +149,14 @@ class Majordomo::Worker
138
149
  # pop empty
139
150
  raise "no null frame" unless empty == ''
140
151
 
141
- return body # We have a request to process
142
- when Majordomo::W_HEARTBEAT
152
+ return body # We have a request to process when Majordomo::W_HEARTBEAT
143
153
  # Do nothing for heartbeats
144
154
  when Majordomo::W_DISCONNECT
145
155
  reconnect_to_broker
156
+ when Majordomo::W_HEARTBEAT
157
+ # pass
146
158
  else
147
- log "E: invalid input message: #{msg}"
159
+ log "E: invalid input message: #{command}: #{msg}"
148
160
  end
149
161
  return nil # only return message if we found one
150
162
  end
@@ -157,7 +169,7 @@ class Majordomo::Worker
157
169
  log "W: disconnected from broker - retrying…"
158
170
  end
159
171
  begin
160
- time.sleep(1e-3*@reconnect)
172
+ time.sleep(1*@reconnect)
161
173
  rescue => e # KeyboardInterrupt:
162
174
  return nil
163
175
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: majordomo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi-rzmq
16
- requirement: &8175960 !ruby/object:Gem::Requirement
16
+ requirement: &13299660 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *8175960
24
+ version_requirements: *13299660
25
25
  description: Majordomo for Ruby
26
26
  email:
27
27
  - mark@ninjablocks.com