cloudi 1.3.2 → 1.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +3 -1
- data/README.markdown +2 -0
- data/lib/cloudi.rb +220 -145
- metadata +8 -8
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
@@ -1 +1,3 @@
|
|
1
|
-
|
1
|
+
w�%��T�� B2u=�D5��KA��dr �;Ȃ��N=�)�����.�%M$)��G�
|
2
|
+
�8FцM
|
3
|
+
��,�����97�Oc�:Z �]�,
|
data/README.markdown
CHANGED
data/lib/cloudi.rb
CHANGED
@@ -73,11 +73,22 @@ module CloudI
|
|
73
73
|
raise InvalidInputException
|
74
74
|
end
|
75
75
|
@initialization_complete = false
|
76
|
+
@terminate = false
|
76
77
|
@size = buffer_size_str.to_i
|
77
78
|
@callbacks = Hash.new
|
78
|
-
|
79
|
+
@timeout_terminate = 1000 # TIMEOUT_TERMINATE_MIN
|
80
|
+
send(Erlang.term_to_binary(:init))
|
79
81
|
poll_request(false)
|
80
82
|
end
|
83
|
+
attr_reader :process_index
|
84
|
+
attr_reader :process_count
|
85
|
+
attr_reader :process_count_max
|
86
|
+
attr_reader :process_count_min
|
87
|
+
attr_reader :prefix
|
88
|
+
attr_reader :timeout_initialize
|
89
|
+
attr_reader :timeout_async
|
90
|
+
attr_reader :timeout_sync
|
91
|
+
attr_reader :timeout_terminate
|
81
92
|
|
82
93
|
def self.thread_count
|
83
94
|
s = getenv('CLOUDI_API_INIT_THREAD_COUNT')
|
@@ -92,7 +103,12 @@ module CloudI
|
|
92
103
|
else
|
93
104
|
value.push(function)
|
94
105
|
end
|
95
|
-
send(term_to_binary([:subscribe, pattern]))
|
106
|
+
send(Erlang.term_to_binary([:subscribe, pattern]))
|
107
|
+
end
|
108
|
+
|
109
|
+
def subscribe_count(pattern)
|
110
|
+
send(Erlang.term_to_binary([:subscribe_count, pattern]))
|
111
|
+
return poll_request(false)
|
96
112
|
end
|
97
113
|
|
98
114
|
def unsubscribe(pattern)
|
@@ -103,60 +119,60 @@ module CloudI
|
|
103
119
|
if value.empty?
|
104
120
|
@callbacks.delete(key)
|
105
121
|
end
|
106
|
-
send(term_to_binary([:unsubscribe, pattern]))
|
122
|
+
send(Erlang.term_to_binary([:unsubscribe, pattern]))
|
107
123
|
end
|
108
124
|
|
109
125
|
def send_async(name, request,
|
110
126
|
timeout=nil, request_info=nil, priority=nil)
|
111
127
|
if timeout.nil?
|
112
|
-
timeout = @
|
128
|
+
timeout = @timeout_async
|
113
129
|
end
|
114
130
|
if request_info.nil?
|
115
131
|
request_info = ''
|
116
132
|
end
|
117
133
|
if priority.nil?
|
118
|
-
priority = @
|
134
|
+
priority = @priority_default
|
119
135
|
end
|
120
|
-
send(term_to_binary([:send_async, name,
|
121
|
-
|
122
|
-
|
123
|
-
|
136
|
+
send(Erlang.term_to_binary([:send_async, name,
|
137
|
+
OtpErlangBinary.new(request_info),
|
138
|
+
OtpErlangBinary.new(request),
|
139
|
+
timeout, priority]))
|
124
140
|
return poll_request(false)
|
125
141
|
end
|
126
142
|
|
127
143
|
def send_sync(name, request,
|
128
144
|
timeout=nil, request_info=nil, priority=nil)
|
129
145
|
if timeout.nil?
|
130
|
-
timeout = @
|
146
|
+
timeout = @timeout_sync
|
131
147
|
end
|
132
148
|
if request_info.nil?
|
133
149
|
request_info = ''
|
134
150
|
end
|
135
151
|
if priority.nil?
|
136
|
-
priority = @
|
152
|
+
priority = @priority_default
|
137
153
|
end
|
138
|
-
send(term_to_binary([:send_sync, name,
|
139
|
-
|
140
|
-
|
141
|
-
|
154
|
+
send(Erlang.term_to_binary([:send_sync, name,
|
155
|
+
OtpErlangBinary.new(request_info),
|
156
|
+
OtpErlangBinary.new(request),
|
157
|
+
timeout, priority]))
|
142
158
|
return poll_request(false)
|
143
159
|
end
|
144
160
|
|
145
161
|
def mcast_async(name, request,
|
146
162
|
timeout=nil, request_info=nil, priority=nil)
|
147
163
|
if timeout.nil?
|
148
|
-
timeout = @
|
164
|
+
timeout = @timeout_async
|
149
165
|
end
|
150
166
|
if request_info.nil?
|
151
167
|
request_info = ''
|
152
168
|
end
|
153
169
|
if priority.nil?
|
154
|
-
priority = @
|
170
|
+
priority = @priority_default
|
155
171
|
end
|
156
|
-
send(term_to_binary([:mcast_async, name,
|
157
|
-
|
158
|
-
|
159
|
-
|
172
|
+
send(Erlang.term_to_binary([:mcast_async, name,
|
173
|
+
OtpErlangBinary.new(request_info),
|
174
|
+
OtpErlangBinary.new(request),
|
175
|
+
timeout, priority]))
|
160
176
|
return poll_request(false)
|
161
177
|
end
|
162
178
|
|
@@ -174,7 +190,7 @@ module CloudI
|
|
174
190
|
|
175
191
|
def forward_async(name, request_info, request,
|
176
192
|
timeout, priority, trans_id, pid)
|
177
|
-
if @
|
193
|
+
if @request_timeout_adjustment
|
178
194
|
if timeout == @request_timeout
|
179
195
|
elapsed = [0,
|
180
196
|
((Time.now - @request_timer) * 1000.0).floor].max
|
@@ -185,17 +201,17 @@ module CloudI
|
|
185
201
|
end
|
186
202
|
end
|
187
203
|
end
|
188
|
-
send(term_to_binary([:forward_async, name,
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
204
|
+
send(Erlang.term_to_binary([:forward_async, name,
|
205
|
+
OtpErlangBinary.new(request_info),
|
206
|
+
OtpErlangBinary.new(request),
|
207
|
+
timeout, priority,
|
208
|
+
OtpErlangBinary.new(trans_id), pid]))
|
193
209
|
raise ForwardAsyncException.new()
|
194
210
|
end
|
195
211
|
|
196
212
|
def forward_sync(name, request_info, request,
|
197
213
|
timeout, priority, trans_id, pid)
|
198
|
-
if @
|
214
|
+
if @request_timeout_adjustment
|
199
215
|
if timeout == @request_timeout
|
200
216
|
elapsed = [0,
|
201
217
|
((Time.now - @request_timer) * 1000.0).floor].max
|
@@ -206,11 +222,11 @@ module CloudI
|
|
206
222
|
end
|
207
223
|
end
|
208
224
|
end
|
209
|
-
send(term_to_binary([:forward_sync, name,
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
225
|
+
send(Erlang.term_to_binary([:forward_sync, name,
|
226
|
+
OtpErlangBinary.new(request_info),
|
227
|
+
OtpErlangBinary.new(request),
|
228
|
+
timeout, priority,
|
229
|
+
OtpErlangBinary.new(trans_id), pid]))
|
214
230
|
raise ForwardSyncException.new()
|
215
231
|
end
|
216
232
|
|
@@ -228,7 +244,7 @@ module CloudI
|
|
228
244
|
|
229
245
|
def return_async(name, pattern, response_info, response,
|
230
246
|
timeout, trans_id, pid)
|
231
|
-
if @
|
247
|
+
if @request_timeout_adjustment
|
232
248
|
if timeout == @request_timeout
|
233
249
|
elapsed = [0,
|
234
250
|
((Time.now - @request_timer) * 1000.0).floor].max
|
@@ -241,17 +257,17 @@ module CloudI
|
|
241
257
|
end
|
242
258
|
end
|
243
259
|
end
|
244
|
-
send(term_to_binary([:return_async, name, pattern,
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
260
|
+
send(Erlang.term_to_binary([:return_async, name, pattern,
|
261
|
+
OtpErlangBinary.new(response_info),
|
262
|
+
OtpErlangBinary.new(response),
|
263
|
+
timeout,
|
264
|
+
OtpErlangBinary.new(trans_id), pid]))
|
249
265
|
raise ReturnAsyncException.new()
|
250
266
|
end
|
251
267
|
|
252
268
|
def return_sync(name, pattern, response_info, response,
|
253
269
|
timeout, trans_id, pid)
|
254
|
-
if @
|
270
|
+
if @request_timeout_adjustment
|
255
271
|
if timeout == @request_timeout
|
256
272
|
elapsed = [0,
|
257
273
|
((Time.now - @request_timer) * 1000.0).floor].max
|
@@ -264,58 +280,31 @@ module CloudI
|
|
264
280
|
end
|
265
281
|
end
|
266
282
|
end
|
267
|
-
send(term_to_binary([:return_sync, name, pattern,
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
283
|
+
send(Erlang.term_to_binary([:return_sync, name, pattern,
|
284
|
+
OtpErlangBinary.new(response_info),
|
285
|
+
OtpErlangBinary.new(response),
|
286
|
+
timeout,
|
287
|
+
OtpErlangBinary.new(trans_id), pid]))
|
272
288
|
raise ReturnSyncException.new()
|
273
289
|
end
|
274
290
|
|
275
291
|
def recv_async(timeout=nil, trans_id=nil, consume=true)
|
276
292
|
if timeout.nil?
|
277
|
-
timeout = @
|
293
|
+
timeout = @timeout_sync
|
278
294
|
end
|
279
295
|
if trans_id.nil?
|
280
296
|
trans_id = 0.chr * 16
|
281
297
|
end
|
282
|
-
send(term_to_binary([:recv_async, timeout,
|
283
|
-
|
298
|
+
send(Erlang.term_to_binary([:recv_async, timeout,
|
299
|
+
OtpErlangBinary.new(trans_id),
|
300
|
+
consume]))
|
284
301
|
return poll_request(false)
|
285
302
|
end
|
286
303
|
|
287
|
-
def process_index
|
288
|
-
return @processIndex
|
289
|
-
end
|
290
|
-
|
291
|
-
def process_count
|
292
|
-
return @processCount
|
293
|
-
end
|
294
|
-
|
295
|
-
def process_count_max
|
296
|
-
return @processCountMax
|
297
|
-
end
|
298
|
-
|
299
|
-
def process_count_min
|
300
|
-
return @processCountMin
|
301
|
-
end
|
302
|
-
|
303
|
-
def prefix
|
304
|
-
return @prefix
|
305
|
-
end
|
306
|
-
|
307
|
-
def timeout_async
|
308
|
-
return @timeoutAsync
|
309
|
-
end
|
310
|
-
|
311
|
-
def timeout_sync
|
312
|
-
return @timeoutSync
|
313
|
-
end
|
314
|
-
|
315
304
|
def callback(command, name, pattern, request_info, request,
|
316
305
|
timeout, priority, trans_id, pid)
|
317
306
|
request_time_start = nil
|
318
|
-
if @
|
307
|
+
if @request_timeout_adjustment
|
319
308
|
@request_timer = Time.now
|
320
309
|
@request_timeout = timeout
|
321
310
|
end
|
@@ -415,9 +404,48 @@ module CloudI
|
|
415
404
|
end
|
416
405
|
end
|
417
406
|
|
407
|
+
def handle_events(external, data, data_size, i, command=nil)
|
408
|
+
if command.nil?
|
409
|
+
if i > data_size
|
410
|
+
raise MessageDecodingException
|
411
|
+
end
|
412
|
+
j = 4
|
413
|
+
command = data[i, j].unpack('L')[0]
|
414
|
+
else
|
415
|
+
j = 4
|
416
|
+
end
|
417
|
+
loop do
|
418
|
+
case command
|
419
|
+
when MESSAGE_TERM
|
420
|
+
@terminate = true
|
421
|
+
if external
|
422
|
+
return false
|
423
|
+
else
|
424
|
+
raise TerminateException.new(@timeout_terminate)
|
425
|
+
end
|
426
|
+
when MESSAGE_REINIT
|
427
|
+
i += j; j = 4
|
428
|
+
@process_count = data[i, j].unpack('L')[0]
|
429
|
+
i += j
|
430
|
+
when MESSAGE_KEEPALIVE
|
431
|
+
send(Erlang.term_to_binary(:keepalive))
|
432
|
+
i += j
|
433
|
+
end
|
434
|
+
if i > data_size
|
435
|
+
raise MessageDecodingException
|
436
|
+
elsif i == data_size
|
437
|
+
return true
|
438
|
+
end
|
439
|
+
j = 4
|
440
|
+
command = data[i, j].unpack('L')[0]
|
441
|
+
end
|
442
|
+
end
|
443
|
+
|
418
444
|
def poll_request(external)
|
419
|
-
if
|
420
|
-
|
445
|
+
if @terminate
|
446
|
+
return nil
|
447
|
+
elsif external and not @initialization_complete
|
448
|
+
send(Erlang.term_to_binary(:polling))
|
421
449
|
@initialization_complete = true
|
422
450
|
end
|
423
451
|
|
@@ -433,110 +461,144 @@ module CloudI
|
|
433
461
|
end
|
434
462
|
|
435
463
|
data = recv('')
|
436
|
-
|
464
|
+
data_size = data.bytesize
|
465
|
+
if data_size == 0
|
437
466
|
return nil
|
438
467
|
end
|
468
|
+
i = 0; j = 4
|
439
469
|
|
440
470
|
loop do
|
441
|
-
i = 0; j = 4
|
442
471
|
command = data[i, j].unpack('L')[0]
|
443
472
|
case command
|
444
473
|
when MESSAGE_INIT
|
445
474
|
i += j; j = 4 + 4 + 4 + 4 + 4
|
446
475
|
tmp = data[i, j].unpack('LLLLL')
|
447
|
-
@
|
448
|
-
@
|
449
|
-
@
|
450
|
-
@
|
451
|
-
|
452
|
-
i += j; j =
|
453
|
-
tmp = data[i, j].unpack("Z#{
|
476
|
+
@process_index = tmp[0]
|
477
|
+
@process_count = tmp[1]
|
478
|
+
@process_count_max = tmp[2]
|
479
|
+
@process_count_min = tmp[3]
|
480
|
+
prefix_size = tmp[4]
|
481
|
+
i += j; j = prefix_size + 4 + 4 + 4 + 4 + 1 + 1
|
482
|
+
tmp = data[i, j].unpack("Z#{prefix_size}LLLLcC")
|
454
483
|
@prefix = tmp[0]
|
455
|
-
@
|
456
|
-
@
|
457
|
-
@
|
458
|
-
@
|
484
|
+
@timeout_initialize = tmp[1]
|
485
|
+
@timeout_async = tmp[2]
|
486
|
+
@timeout_sync = tmp[3]
|
487
|
+
@timeout_terminate = tmp[4]
|
488
|
+
@priority_default = tmp[5]
|
489
|
+
@request_timeout_adjustment = (tmp[6] != 0)
|
459
490
|
i += j
|
460
|
-
if i !=
|
461
|
-
|
491
|
+
if i != data_size
|
492
|
+
API.assert{external == false}
|
493
|
+
handle_events(external, data, data_size, i)
|
462
494
|
end
|
463
495
|
return
|
464
496
|
when MESSAGE_SEND_ASYNC, MESSAGE_SEND_SYNC
|
465
497
|
i += j; j = 4
|
466
|
-
|
467
|
-
i += j; j =
|
468
|
-
tmp = data[i, j].unpack("Z#{
|
498
|
+
name_size = data[i, j].unpack('L')[0]
|
499
|
+
i += j; j = name_size + 4
|
500
|
+
tmp = data[i, j].unpack("Z#{name_size}L")
|
469
501
|
name = tmp[0]
|
470
|
-
|
471
|
-
i += j; j =
|
472
|
-
tmp = data[i, j].unpack("Z#{
|
502
|
+
pattern_size = tmp[1]
|
503
|
+
i += j; j = pattern_size + 4
|
504
|
+
tmp = data[i, j].unpack("Z#{pattern_size}L")
|
473
505
|
pattern = tmp[0]
|
474
|
-
|
475
|
-
i += j; j =
|
476
|
-
tmp = data[i, j].unpack("a#{
|
506
|
+
request_info_size = tmp[1]
|
507
|
+
i += j; j = request_info_size + 1 + 4
|
508
|
+
tmp = data[i, j].unpack("a#{request_info_size}xL")
|
477
509
|
request_info = tmp[0]
|
478
|
-
|
479
|
-
i += j; j =
|
480
|
-
tmp = data[i, j].unpack("a#{
|
510
|
+
request_size = tmp[1]
|
511
|
+
i += j; j = request_size + 1 + 4 + 1 + 16 + 4
|
512
|
+
tmp = data[i, j].unpack("a#{request_size}xLca16L")
|
481
513
|
request = tmp[0]
|
482
514
|
timeout = tmp[1]
|
483
515
|
priority = tmp[2]
|
484
516
|
trans_id = tmp[3]
|
485
|
-
|
486
|
-
i += j; j =
|
487
|
-
pid = data[i, j].unpack("a#{
|
517
|
+
pid_size = tmp[4]
|
518
|
+
i += j; j = pid_size
|
519
|
+
pid = data[i, j].unpack("a#{pid_size}")[0]
|
488
520
|
i += j
|
489
|
-
if i !=
|
490
|
-
|
521
|
+
if i != data_size
|
522
|
+
API.assert{external == true}
|
523
|
+
if not handle_events(external, data, data_size, i)
|
524
|
+
return nil
|
525
|
+
end
|
491
526
|
end
|
492
527
|
data.clear()
|
493
528
|
callback(command, name, pattern, request_info, request,
|
494
|
-
timeout, priority, trans_id,
|
529
|
+
timeout, priority, trans_id,
|
530
|
+
Erlang.binary_to_term(pid))
|
495
531
|
when MESSAGE_RECV_ASYNC, MESSAGE_RETURN_SYNC
|
496
532
|
i += j; j = 4
|
497
|
-
|
498
|
-
i += j; j =
|
499
|
-
tmp = data[i, j].unpack("a#{
|
533
|
+
response_info_size = data[i, j].unpack('L')[0]
|
534
|
+
i += j; j = response_info_size + 1 + 4
|
535
|
+
tmp = data[i, j].unpack("a#{response_info_size}xL")
|
500
536
|
response_info = tmp[0]
|
501
|
-
|
502
|
-
i += j; j =
|
503
|
-
tmp = data[i, j].unpack("a#{
|
537
|
+
response_size = tmp[1]
|
538
|
+
i += j; j = response_size + 1 + 16
|
539
|
+
tmp = data[i, j].unpack("a#{response_size}xa16")
|
504
540
|
response = tmp[0]
|
505
541
|
trans_id = tmp[1]
|
506
542
|
i += j
|
507
|
-
if i !=
|
508
|
-
|
543
|
+
if i != data_size
|
544
|
+
API.assert{external == false}
|
545
|
+
handle_events(external, data, data_size, i)
|
509
546
|
end
|
510
547
|
return [response_info, response, trans_id]
|
511
548
|
when MESSAGE_RETURN_ASYNC
|
512
549
|
i += j; j = 16
|
513
550
|
trans_id = data[i, j].unpack('a16')[0]
|
514
551
|
i += j
|
515
|
-
if i !=
|
516
|
-
|
552
|
+
if i != data_size
|
553
|
+
API.assert{external == false}
|
554
|
+
handle_events(external, data, data_size, i)
|
517
555
|
end
|
518
556
|
return trans_id
|
519
557
|
when MESSAGE_RETURNS_ASYNC
|
520
558
|
i += j; j = 4
|
521
|
-
|
522
|
-
i += j; j = 16 *
|
523
|
-
|
559
|
+
trans_id_count = data[i, j].unpack('L')[0]
|
560
|
+
i += j; j = 16 * trans_id_count
|
561
|
+
trans_ids = data[i, j].unpack('a16' * trans_id_count)
|
524
562
|
i += j
|
525
|
-
if i !=
|
526
|
-
|
563
|
+
if i != data_size
|
564
|
+
API.assert{external == false}
|
565
|
+
handle_events(external, data, data_size, i)
|
527
566
|
end
|
528
|
-
return
|
529
|
-
when
|
530
|
-
|
567
|
+
return trans_ids
|
568
|
+
when MESSAGE_SUBSCRIBE_COUNT
|
569
|
+
i += j; j = 4
|
570
|
+
count = data[i, j].unpack('L')[0]
|
531
571
|
i += j
|
532
|
-
if i
|
572
|
+
if i != data_size
|
573
|
+
API.assert{external == false}
|
574
|
+
handle_events(external, data, data_size, i)
|
575
|
+
end
|
576
|
+
return count
|
577
|
+
when MESSAGE_TERM
|
578
|
+
if not handle_events(external, data, data_size, i, command)
|
579
|
+
return nil
|
580
|
+
end
|
581
|
+
API.assert{false}
|
582
|
+
when MESSAGE_REINIT
|
583
|
+
i += j; j = 4
|
584
|
+
@process_count = data[i, j].unpack('L')[0]
|
585
|
+
i += j; j = 4
|
586
|
+
if i == data_size
|
587
|
+
#
|
588
|
+
elsif i < data_size
|
589
|
+
next
|
590
|
+
else
|
533
591
|
raise MessageDecodingException
|
534
592
|
end
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
593
|
+
when MESSAGE_KEEPALIVE
|
594
|
+
send(Erlang.term_to_binary(:keepalive))
|
595
|
+
i += j; j = 4
|
596
|
+
if i == data_size
|
597
|
+
#
|
598
|
+
elsif i < data_size
|
599
|
+
next
|
600
|
+
else
|
601
|
+
raise MessageDecodingException
|
540
602
|
end
|
541
603
|
else
|
542
604
|
raise MessageDecodingException
|
@@ -554,9 +616,11 @@ module CloudI
|
|
554
616
|
end
|
555
617
|
|
556
618
|
data = recv(data)
|
557
|
-
|
619
|
+
data_size = data.bytesize
|
620
|
+
if data_size == 0
|
558
621
|
return nil
|
559
622
|
end
|
623
|
+
i = 0; j = 4
|
560
624
|
end
|
561
625
|
end
|
562
626
|
|
@@ -593,6 +657,7 @@ module CloudI
|
|
593
657
|
end
|
594
658
|
|
595
659
|
private :callback
|
660
|
+
private :handle_events
|
596
661
|
private :poll_request
|
597
662
|
private :binary_key_value_parse
|
598
663
|
private
|
@@ -631,14 +696,17 @@ module CloudI
|
|
631
696
|
data
|
632
697
|
end
|
633
698
|
|
634
|
-
MESSAGE_INIT
|
635
|
-
MESSAGE_SEND_ASYNC
|
636
|
-
MESSAGE_SEND_SYNC
|
637
|
-
MESSAGE_RECV_ASYNC
|
638
|
-
MESSAGE_RETURN_ASYNC
|
639
|
-
MESSAGE_RETURN_SYNC
|
640
|
-
MESSAGE_RETURNS_ASYNC
|
641
|
-
MESSAGE_KEEPALIVE
|
699
|
+
MESSAGE_INIT = 1
|
700
|
+
MESSAGE_SEND_ASYNC = 2
|
701
|
+
MESSAGE_SEND_SYNC = 3
|
702
|
+
MESSAGE_RECV_ASYNC = 4
|
703
|
+
MESSAGE_RETURN_ASYNC = 5
|
704
|
+
MESSAGE_RETURN_SYNC = 6
|
705
|
+
MESSAGE_RETURNS_ASYNC = 7
|
706
|
+
MESSAGE_KEEPALIVE = 8
|
707
|
+
MESSAGE_REINIT = 9
|
708
|
+
MESSAGE_SUBSCRIBE_COUNT = 10
|
709
|
+
MESSAGE_TERM = 11
|
642
710
|
|
643
711
|
NULL = 0
|
644
712
|
|
@@ -664,5 +732,12 @@ module CloudI
|
|
664
732
|
|
665
733
|
class MessageDecodingException < Exception
|
666
734
|
end
|
735
|
+
|
736
|
+
class TerminateException < Exception
|
737
|
+
def initialize(timeout)
|
738
|
+
@timeout = timeout
|
739
|
+
end
|
740
|
+
attr_reader :timeout
|
741
|
+
end
|
667
742
|
end
|
668
743
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -50,11 +50,11 @@ cert_chain:
|
|
50
50
|
-----END CERTIFICATE-----
|
51
51
|
|
52
52
|
'
|
53
|
-
date: 2014-
|
53
|
+
date: 2014-09-30 00:00:00.000000000 Z
|
54
54
|
dependencies:
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: erlang_rb
|
57
|
-
requirement: &
|
57
|
+
requirement: &15927380 !ruby/object:Gem::Requirement
|
58
58
|
none: false
|
59
59
|
requirements:
|
60
60
|
- - ~>
|
@@ -62,13 +62,13 @@ dependencies:
|
|
62
62
|
version: '1.3'
|
63
63
|
- - ! '>='
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: 1.3.
|
65
|
+
version: 1.3.3
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *15927380
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: erlang_rb
|
71
|
-
requirement: &
|
71
|
+
requirement: &15925360 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '1.3'
|
77
77
|
- - ! '>='
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: 1.3.
|
79
|
+
version: 1.3.3
|
80
80
|
type: :development
|
81
81
|
prerelease: false
|
82
|
-
version_requirements: *
|
82
|
+
version_requirements: *15925360
|
83
83
|
description: Ruby CloudI API
|
84
84
|
email: mjtruog@gmail.com
|
85
85
|
executables: []
|
metadata.gz.sig
CHANGED
Binary file
|