isono 0.2.19 → 0.2.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/isono.gemspec +1 -1
- data/lib/isono/node_modules/rpc_channel.rb +25 -18
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e666f9b342338026fe08b4880bf74dfb60673f8
|
4
|
+
data.tar.gz: a1127479b2ad3c83acff866011b1eaee1286907e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6271d86c5ec057bf267a3bc4322f19fdc83187d9ae1635691757a878688a66c67fa2a00d099cf9c3d7347feecd8e7ba99c3caec1d3f8522c76226a8f8af0a79c
|
7
|
+
data.tar.gz: 7ce671336b7e6bb8db77aaa8782445ce15ba1920f90ece1ce7cdf5edde5374697f0080995b9df0df64756bd7b4a42f8e0351e8d40f24da87276f0f282f864461
|
data/isono.gemspec
CHANGED
@@ -105,7 +105,7 @@ module Isono
|
|
105
105
|
attr_reader :amq
|
106
106
|
|
107
107
|
# Make a RPC request to an endpoint.
|
108
|
-
#
|
108
|
+
#
|
109
109
|
# @param [String] endpoint
|
110
110
|
# @param [String] command
|
111
111
|
# @param [Array] args
|
@@ -125,7 +125,7 @@ module Isono
|
|
125
125
|
# }
|
126
126
|
#
|
127
127
|
# @example setup request context and do wait().
|
128
|
-
# Note that callbacks are
|
128
|
+
# Note that callbacks are
|
129
129
|
# rpc.request('endpoint1', 'func1', xxxx) { |req|
|
130
130
|
# # send new attribute
|
131
131
|
# req.request[:xxxx] = "sdfsdf"
|
@@ -133,7 +133,7 @@ module Isono
|
|
133
133
|
# req.synchronize
|
134
134
|
# }.wait # request() get back the altered RequestCotenxt that has wait().
|
135
135
|
#
|
136
|
-
# @example Create async oneshot call. (do not expect response)
|
136
|
+
# @example Create async oneshot call. (do not expect response)
|
137
137
|
# rpc.request('endpoint1', 'func1') { |req|
|
138
138
|
# req.oneshot = true
|
139
139
|
# }
|
@@ -141,7 +141,7 @@ module Isono
|
|
141
141
|
req = RequestContext.new(endpoint, command, args)
|
142
142
|
# the block is to setup the request context prior to sending.
|
143
143
|
if blk
|
144
|
-
# async
|
144
|
+
# async
|
145
145
|
r = blk.call(req)
|
146
146
|
req = r if r.is_a?(RequestContext)
|
147
147
|
send_request(req)
|
@@ -165,7 +165,7 @@ module Isono
|
|
165
165
|
def register_endpoint(endpoint, app, opts={})
|
166
166
|
raise TypeError unless app.respond_to?(:call)
|
167
167
|
opts = {:exclusive=>true, :prefetch=>1}.merge(opts)
|
168
|
-
|
168
|
+
|
169
169
|
# create receive queue for new RPC endpoint.
|
170
170
|
endpoint_proc = proc { |header, data|
|
171
171
|
|
@@ -188,7 +188,7 @@ module Isono
|
|
188
188
|
end
|
189
189
|
}
|
190
190
|
|
191
|
-
|
191
|
+
|
192
192
|
EventMachine.schedule {
|
193
193
|
ch = node.create_channel
|
194
194
|
|
@@ -215,7 +215,7 @@ module Isono
|
|
215
215
|
end
|
216
216
|
|
217
217
|
# Unregister endpoint.
|
218
|
-
#
|
218
|
+
#
|
219
219
|
# @param [String] endpoint endpoint name to be removed
|
220
220
|
def unregister_endpoint(endpoint)
|
221
221
|
if @endpoints.has_key?(endpoint)
|
@@ -228,7 +228,7 @@ module Isono
|
|
228
228
|
}
|
229
229
|
end
|
230
230
|
end
|
231
|
-
|
231
|
+
|
232
232
|
private
|
233
233
|
def endpoint_queue_name(ns)
|
234
234
|
"isono.rpc.endpoint.#{ns}"
|
@@ -253,9 +253,9 @@ module Isono
|
|
253
253
|
# set default timeout if no one updated the initial value.
|
254
254
|
req.timeout_sec = config_section.timeout_sec
|
255
255
|
end
|
256
|
-
|
256
|
+
|
257
257
|
req.process_event(:on_ready)
|
258
|
-
|
258
|
+
|
259
259
|
EventMachine.schedule {
|
260
260
|
@stats[:total_request_count] += 1
|
261
261
|
if @stats[:peak_wait_response_size] < @active_requests.size
|
@@ -281,7 +281,7 @@ module Isono
|
|
281
281
|
|
282
282
|
class ResponseContext
|
283
283
|
attr_reader :header
|
284
|
-
|
284
|
+
|
285
285
|
def initialize(exchange, header)
|
286
286
|
@responded = false
|
287
287
|
@exchange = exchange
|
@@ -342,6 +342,8 @@ module Isono
|
|
342
342
|
attr_reader :error_cb, :success_cb, :progress_cb
|
343
343
|
attr_reader :state
|
344
344
|
|
345
|
+
include Isono::Logger
|
346
|
+
|
345
347
|
def initialize(endpoint, command, args)
|
346
348
|
super({:request=>{
|
347
349
|
:endpoint=> endpoint,
|
@@ -355,7 +357,7 @@ module Isono
|
|
355
357
|
:completed_at => nil,
|
356
358
|
:complete_status => nil,
|
357
359
|
})
|
358
|
-
|
360
|
+
|
359
361
|
@success_cb = nil
|
360
362
|
@progress_cb = nil
|
361
363
|
@error_cb = nil
|
@@ -432,10 +434,11 @@ module Isono
|
|
432
434
|
module RequestSynchronize
|
433
435
|
def self.extended(mod)
|
434
436
|
raise TypeError, "This module is applicable only for RequestContext" unless mod.is_a?(RequestContext)
|
437
|
+
|
435
438
|
# overwrite callbacks
|
436
439
|
mod.instance_eval {
|
437
440
|
@q = ::Queue.new
|
438
|
-
|
441
|
+
|
439
442
|
on_success { |r|
|
440
443
|
@q << [:success, r]
|
441
444
|
}
|
@@ -447,11 +450,15 @@ module Isono
|
|
447
450
|
|
448
451
|
public
|
449
452
|
def wait()
|
450
|
-
raise "response was received already." if state == :done
|
451
453
|
raise "wait() has to be called at outside of the EventMachine's main loop." if EventMachine.reactor_thread?
|
452
|
-
|
454
|
+
if state == :done && @q.empty?
|
455
|
+
logger.warn "Remote procedure call state is 'done' and response queue is empty. " +
|
456
|
+
"May be waiting forever for a response. Endpoint: '%s' Command: '%s'" %
|
457
|
+
[endpoint, command]
|
458
|
+
end
|
459
|
+
|
453
460
|
r = @q.deq
|
454
|
-
|
461
|
+
|
455
462
|
case r[0]
|
456
463
|
when :success
|
457
464
|
r[1]
|
@@ -460,9 +467,9 @@ module Isono
|
|
460
467
|
end
|
461
468
|
end
|
462
469
|
end
|
463
|
-
|
470
|
+
|
464
471
|
end
|
465
|
-
|
472
|
+
|
466
473
|
end
|
467
474
|
end
|
468
475
|
end
|