cloudi 1.8.0 → 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data/lib/cloudi.rb +97 -36
- data.tar.gz.sig +3 -2
- metadata +34 -31
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ec1f808877875a04bb8cc6d8032477b6b44e0e763ad360f38a3c48bd3cb3d233
|
4
|
+
data.tar.gz: 1d49c29f896452019b72277eadb93825dea75a3db72848bab5aa0b65bde83f69
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 040ba56cf7b16795208479b2d4c8fd0a0fe79f140fe0ca30b6f71c026d7398f8fa583b0de0d8a37667fd6eb9588f7ac0a912d19c6f4102b6aa72c0acf6bc4770
|
7
|
+
data.tar.gz: fbb6fea699893de2a12b53308b7f48afe84daa2a6caaa50edfad30afce2e893a4314475fe751b8c947b0175f2e1b4dfd353e513169aa41cd66b20e53f2a1a6dc
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/cloudi.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
#
|
5
5
|
# MIT License
|
6
6
|
#
|
7
|
-
# Copyright (c) 2011-
|
7
|
+
# Copyright (c) 2011-2021 Michael Truog <mjtruog at protonmail dot com>
|
8
8
|
#
|
9
9
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
10
10
|
# copy of this software and associated documentation files (the "Software"),
|
@@ -31,6 +31,7 @@ $stdout.sync = true
|
|
31
31
|
$stderr.sync = true
|
32
32
|
|
33
33
|
require 'erlang'
|
34
|
+
require 'stringio'
|
34
35
|
|
35
36
|
module CloudI
|
36
37
|
class API
|
@@ -56,13 +57,14 @@ module CloudI
|
|
56
57
|
@s.sync = true
|
57
58
|
@use_header = true
|
58
59
|
else
|
60
|
+
$stderr.puts 'CloudI service execution must occur in CloudI'
|
59
61
|
raise InvalidInputException
|
60
62
|
end
|
61
63
|
@initialization_complete = false
|
62
64
|
@terminate = false
|
63
65
|
@size = buffer_size_str.to_i
|
64
66
|
@callbacks = Hash.new
|
65
|
-
@timeout_terminate =
|
67
|
+
@timeout_terminate = 10 # TIMEOUT_TERMINATE_MIN
|
66
68
|
send(Erlang.term_to_binary(:init))
|
67
69
|
poll_request(nil, false)
|
68
70
|
end
|
@@ -75,6 +77,7 @@ module CloudI
|
|
75
77
|
attr_reader :timeout_async
|
76
78
|
attr_reader :timeout_sync
|
77
79
|
attr_reader :timeout_terminate
|
80
|
+
attr_reader :priority_default
|
78
81
|
|
79
82
|
def self.thread_count
|
80
83
|
s = getenv('CLOUDI_API_INIT_THREAD_COUNT')
|
@@ -181,7 +184,7 @@ module CloudI
|
|
181
184
|
OtpErlangBinary.new(request),
|
182
185
|
timeout, priority,
|
183
186
|
OtpErlangBinary.new(trans_id), pid]))
|
184
|
-
raise ForwardAsyncException
|
187
|
+
raise ForwardAsyncException
|
185
188
|
end
|
186
189
|
|
187
190
|
def forward_sync(name, request_info, request,
|
@@ -191,7 +194,7 @@ module CloudI
|
|
191
194
|
OtpErlangBinary.new(request),
|
192
195
|
timeout, priority,
|
193
196
|
OtpErlangBinary.new(trans_id), pid]))
|
194
|
-
raise ForwardSyncException
|
197
|
+
raise ForwardSyncException
|
195
198
|
end
|
196
199
|
|
197
200
|
def return_(request_type, name, pattern, response_info, response,
|
@@ -213,7 +216,7 @@ module CloudI
|
|
213
216
|
OtpErlangBinary.new(response),
|
214
217
|
timeout,
|
215
218
|
OtpErlangBinary.new(trans_id), pid]))
|
216
|
-
raise ReturnAsyncException
|
219
|
+
raise ReturnAsyncException
|
217
220
|
end
|
218
221
|
|
219
222
|
def return_sync(name, pattern, response_info, response,
|
@@ -223,7 +226,7 @@ module CloudI
|
|
223
226
|
OtpErlangBinary.new(response),
|
224
227
|
timeout,
|
225
228
|
OtpErlangBinary.new(trans_id), pid]))
|
226
|
-
raise ReturnSyncException
|
229
|
+
raise ReturnSyncException
|
227
230
|
end
|
228
231
|
|
229
232
|
def recv_async(timeout=nil, trans_id=nil, consume=true)
|
@@ -253,6 +256,7 @@ module CloudI
|
|
253
256
|
function = function_queue.shift
|
254
257
|
function_queue.push(function)
|
255
258
|
end
|
259
|
+
return_null_response = false
|
256
260
|
case command
|
257
261
|
when MESSAGE_SEND_ASYNC
|
258
262
|
begin
|
@@ -272,29 +276,39 @@ module CloudI
|
|
272
276
|
if not response.kind_of?(String)
|
273
277
|
response = ''
|
274
278
|
end
|
275
|
-
rescue InvalidInputException => e
|
276
|
-
raise e
|
277
279
|
rescue MessageDecodingException => e
|
278
|
-
|
280
|
+
@terminate = true
|
281
|
+
return_null_response = true
|
279
282
|
rescue TerminateException => e
|
280
|
-
|
283
|
+
return_null_response = true
|
281
284
|
rescue ReturnAsyncException
|
282
285
|
return
|
283
|
-
rescue ForwardAsyncException
|
284
|
-
return
|
285
286
|
rescue ReturnSyncException => e
|
287
|
+
@terminate = true
|
286
288
|
$stderr.puts e.message
|
287
289
|
$stderr.puts e.backtrace
|
288
|
-
|
290
|
+
return
|
291
|
+
rescue ForwardAsyncException
|
289
292
|
return
|
290
293
|
rescue ForwardSyncException => e
|
294
|
+
@terminate = true
|
291
295
|
$stderr.puts e.message
|
292
296
|
$stderr.puts e.backtrace
|
293
|
-
API.assert{false}
|
294
297
|
return
|
298
|
+
rescue StandardError => e
|
299
|
+
return_null_response = true
|
300
|
+
$stderr.puts e.message
|
301
|
+
$stderr.puts e.backtrace
|
302
|
+
rescue SystemExit => e
|
303
|
+
$stderr.puts e.message
|
304
|
+
$stderr.puts e.backtrace
|
305
|
+
raise
|
295
306
|
rescue
|
296
307
|
$stderr.puts $!.message
|
297
308
|
$stderr.puts $!.backtrace
|
309
|
+
exit(1)
|
310
|
+
end
|
311
|
+
if return_null_response
|
298
312
|
response_info = ''
|
299
313
|
response = ''
|
300
314
|
end
|
@@ -321,29 +335,39 @@ module CloudI
|
|
321
335
|
if not response.kind_of?(String)
|
322
336
|
response = ''
|
323
337
|
end
|
324
|
-
rescue InvalidInputException => e
|
325
|
-
raise e
|
326
338
|
rescue MessageDecodingException => e
|
327
|
-
|
339
|
+
@terminate = true
|
340
|
+
return_null_response = true
|
328
341
|
rescue TerminateException => e
|
329
|
-
|
342
|
+
return_null_response = true
|
330
343
|
rescue ReturnSyncException
|
331
344
|
return
|
332
|
-
rescue ForwardSyncException
|
333
|
-
return
|
334
345
|
rescue ReturnAsyncException => e
|
346
|
+
@terminate = true
|
335
347
|
$stderr.puts e.message
|
336
348
|
$stderr.puts e.backtrace
|
337
|
-
|
349
|
+
return
|
350
|
+
rescue ForwardSyncException
|
338
351
|
return
|
339
352
|
rescue ForwardAsyncException => e
|
353
|
+
@terminate = true
|
340
354
|
$stderr.puts e.message
|
341
355
|
$stderr.puts e.backtrace
|
342
|
-
API.assert{false}
|
343
356
|
return
|
357
|
+
rescue StandardError => e
|
358
|
+
return_null_response = true
|
359
|
+
$stderr.puts e.message
|
360
|
+
$stderr.puts e.backtrace
|
361
|
+
rescue SystemExit => e
|
362
|
+
$stderr.puts e.message
|
363
|
+
$stderr.puts e.backtrace
|
364
|
+
raise
|
344
365
|
rescue
|
345
366
|
$stderr.puts $!.message
|
346
367
|
$stderr.puts $!.backtrace
|
368
|
+
exit(1)
|
369
|
+
end
|
370
|
+
if return_null_response
|
347
371
|
response_info = ''
|
348
372
|
response = ''
|
349
373
|
end
|
@@ -402,7 +426,11 @@ module CloudI
|
|
402
426
|
|
403
427
|
def poll_request(timeout, external)
|
404
428
|
if @terminate
|
405
|
-
|
429
|
+
if external
|
430
|
+
return false
|
431
|
+
else
|
432
|
+
raise TerminateException.new(@timeout_terminate)
|
433
|
+
end
|
406
434
|
elsif external and not @initialization_complete
|
407
435
|
send(Erlang.term_to_binary(:polling))
|
408
436
|
@initialization_complete = true
|
@@ -492,6 +520,9 @@ module CloudI
|
|
492
520
|
callback(command, name, pattern, request_info, request,
|
493
521
|
request_timeout, priority, trans_id,
|
494
522
|
Erlang.binary_to_term(pid))
|
523
|
+
if @terminate
|
524
|
+
return false
|
525
|
+
end
|
495
526
|
when MESSAGE_RECV_ASYNC, MESSAGE_RETURN_SYNC
|
496
527
|
i += j; j = 4
|
497
528
|
response_info_size = data[i, j].unpack('L')[0]
|
@@ -622,35 +653,59 @@ module CloudI
|
|
622
653
|
send(Erlang.term_to_binary([:shutdown, reason]))
|
623
654
|
end
|
624
655
|
|
625
|
-
def
|
626
|
-
|
627
|
-
|
628
|
-
(0...(
|
629
|
-
value =
|
656
|
+
def self.text_pairs_parse(text)
|
657
|
+
pairs = {}
|
658
|
+
text_segments = text.split(NULL.chr)
|
659
|
+
(0...(text_segments.length)).step(2).each do |i|
|
660
|
+
value = pairs[text_segments[i]]
|
630
661
|
if value == nil
|
631
|
-
|
662
|
+
pairs[text_segments[i]] = text_segments[i + 1]
|
632
663
|
elsif value.kind_of?(Array)
|
633
|
-
value <<
|
664
|
+
value << text_segments[i + 1]
|
665
|
+
else
|
666
|
+
pairs[text_segments[i]] = [value, text_segments[i + 1]]
|
667
|
+
end
|
668
|
+
end
|
669
|
+
return pairs
|
670
|
+
end
|
671
|
+
|
672
|
+
def self.text_pairs_new(pairs, response)
|
673
|
+
text_stream = StringIO.new
|
674
|
+
pairs.each do |key, values|
|
675
|
+
if values.kind_of?(String)
|
676
|
+
text_stream.write "#{key}\0#{values}\0"
|
634
677
|
else
|
635
|
-
|
678
|
+
values.each do |value|
|
679
|
+
text_stream.write "#{key}\0#{value}\0"
|
680
|
+
end
|
636
681
|
end
|
637
682
|
end
|
638
|
-
|
683
|
+
text = text_stream.string
|
684
|
+
if response and text == ''
|
685
|
+
return "\0"
|
686
|
+
else
|
687
|
+
return text
|
688
|
+
end
|
639
689
|
end
|
640
690
|
|
641
|
-
def info_key_value_parse(
|
642
|
-
return
|
691
|
+
def self.info_key_value_parse(info)
|
692
|
+
return text_pairs_parse(info)
|
693
|
+
end
|
694
|
+
|
695
|
+
def self.info_key_value_new(pairs, response = true)
|
696
|
+
return text_pairs_new(pairs, response)
|
643
697
|
end
|
644
698
|
|
645
699
|
def self.assert
|
646
|
-
raise
|
700
|
+
raise AssertionError unless yield # if $DEBUG
|
647
701
|
end
|
648
702
|
|
649
703
|
private :null_response
|
650
704
|
private :callback
|
651
705
|
private :handle_events
|
652
706
|
private :poll_request
|
653
|
-
|
707
|
+
private_class_method :text_pairs_parse
|
708
|
+
private_class_method :text_pairs_new
|
654
709
|
private
|
655
710
|
|
656
711
|
def send(data)
|
@@ -736,5 +791,11 @@ module CloudI
|
|
736
791
|
end
|
737
792
|
attr_reader :timeout
|
738
793
|
end
|
794
|
+
|
795
|
+
class AssertionError < Exception
|
796
|
+
end
|
797
|
+
|
798
|
+
class FatalError < Exception
|
799
|
+
end
|
739
800
|
end
|
740
801
|
|
data.tar.gz.sig
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
)3�0Lj2ӥ��%��q$������>����ծ[��qأ��
|
2
|
+
��X�Ƹ�^��_��Y���Rפ�Z|�ca��ԅ�bj1a���ILp��������D/T%� '��7�}�N�=��h���;��6��1��
|
3
|
+
��v�q��@�v����h|��9�̈��B�u��\�o�rgw��s�J��Kj+��ɪ�#��d4�xD��ܮR�P/��ޓ�x���T֡?�ha-)����
|
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:
|
4
|
+
version: 2.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Truog
|
@@ -10,27 +10,31 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
13
|
+
MIIESDCCArCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAnMSUwIwYDVQQDDBxtanRy
|
14
|
+
dW9nL0RDPXByb3Rvbm1haWwvREM9Y29tMB4XDTIxMDUyNzIwNTIwMFoXDTIyMDUy
|
15
|
+
NzIwNTIwMFowJzElMCMGA1UEAwwcbWp0cnVvZy9EQz1wcm90b25tYWlsL0RDPWNv
|
16
|
+
bTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMd6XAi81JZcv5AzNqvx
|
17
|
+
7rPXgBArpQVU0zoUCcJ8ZkszXLnaDkyLXZZDWi4tNIZGzkFGzJv2YxQg/ocUzZXF
|
18
|
+
ixcKuCiUF8nvV58DrFxd8ZYvYMk9GDoU95zIu/brrn6KeFP/nd10vtx46hSlGgeE
|
19
|
+
2vzk2pxw8Umml6xwTuximLjVcetas0tIm3kcUAhdWnI7hTgQbPmsGMEtpebpx4Ff
|
20
|
+
RluZWlBVLt0i1mFpG2BxtGXLFxgxzK/syD8ZHBwaraW5k2ENY163TaJUo2NjDpNF
|
21
|
+
0GpcyslZLz0JKKS1RHyuj6fI5cB+7pP/ewbU7ksoMa8zN067gG6Ry75RnKu/Tfzv
|
22
|
+
Ebh3eBwapuvHnPsWZlyqsPBhoFUH2JUknUgtcg1Q2S6CmzyxdyDaU8OugladoDzF
|
23
|
+
hWuqx3Mt2cvo1kIUCmxUFtHDzTWy5MP0LMv2IwvU6bbgzgbDndqAj9OesQYTxQ7L
|
24
|
+
rbMFjq1GW7nQXvU9GEb1WJYr2Aq8qovn/6mxFWjPVIp7gQIDAQABo38wfTAJBgNV
|
25
|
+
HRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUoFV73/q6KrKCMTCPVy0+jptr
|
26
|
+
25AwIQYDVR0RBBowGIEWbWp0cnVvZ0Bwcm90b25tYWlsLmNvbTAhBgNVHRIEGjAY
|
27
|
+
gRZtanRydW9nQHByb3Rvbm1haWwuY29tMA0GCSqGSIb3DQEBCwUAA4IBgQATTfoe
|
28
|
+
WbWoOclAmsl338LM/RjGpXVi6N9XF01JhgIXJqQocMlc6L8I6hG9288bQ4nYtYHU
|
29
|
+
Zpw1Wy+5nlAtoacG+ngQLnB1k+oLi1PXN//MjcD5N+qyAgZ71StjzH7+cPiEA5aw
|
30
|
+
0CCXPnsZQR892eESnE8Sc6QEc4iwCdIqbwBgQ4tjF6I34odtuAO2Ydp6keE/eqeQ
|
31
|
+
UdATiqZuvgi/n3fgvFD8FgDec8eiM/u3+n30xc+86m2uqiKSf9ueBNZRmNq9umc4
|
32
|
+
qyyl2UpTyk2WqaXXRCLqKF20QlU2lyR2JnPh7+EsrQKmaaPtw+7QwRhERxXza52x
|
33
|
+
lSRl2bAVGGyRLghx/n1K1ZISc9UJERR7tdEz3N4fbKzRxG5Tk0b7HdeGotue9Zt3
|
34
|
+
WH4J2/+Q2b2u3K1U9iGPxyO3BEBz36D/qdddw1eZTdpT6LFrBQNOVS8C/cVRpUlp
|
35
|
+
VOqfJ1qX4PhcbAYvPwmU8NKJ1UDTdEf4+e+JgHk5qLzpjNsiHYEGTN3E7Gw=
|
32
36
|
-----END CERTIFICATE-----
|
33
|
-
date:
|
37
|
+
date: 2021-12-04 00:00:00.000000000 Z
|
34
38
|
dependencies:
|
35
39
|
- !ruby/object:Gem::Dependency
|
36
40
|
name: erlang_rb
|
@@ -38,40 +42,40 @@ dependencies:
|
|
38
42
|
requirements:
|
39
43
|
- - "~>"
|
40
44
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
45
|
+
version: '2.0'
|
42
46
|
- - ">="
|
43
47
|
- !ruby/object:Gem::Version
|
44
|
-
version:
|
48
|
+
version: 2.0.4
|
45
49
|
type: :runtime
|
46
50
|
prerelease: false
|
47
51
|
version_requirements: !ruby/object:Gem::Requirement
|
48
52
|
requirements:
|
49
53
|
- - "~>"
|
50
54
|
- !ruby/object:Gem::Version
|
51
|
-
version: '
|
55
|
+
version: '2.0'
|
52
56
|
- - ">="
|
53
57
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
58
|
+
version: 2.0.4
|
55
59
|
- !ruby/object:Gem::Dependency
|
56
60
|
name: erlang_rb
|
57
61
|
requirement: !ruby/object:Gem::Requirement
|
58
62
|
requirements:
|
59
63
|
- - "~>"
|
60
64
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
65
|
+
version: '2.0'
|
62
66
|
- - ">="
|
63
67
|
- !ruby/object:Gem::Version
|
64
|
-
version:
|
68
|
+
version: 2.0.4
|
65
69
|
type: :development
|
66
70
|
prerelease: false
|
67
71
|
version_requirements: !ruby/object:Gem::Requirement
|
68
72
|
requirements:
|
69
73
|
- - "~>"
|
70
74
|
- !ruby/object:Gem::Version
|
71
|
-
version: '
|
75
|
+
version: '2.0'
|
72
76
|
- - ">="
|
73
77
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
78
|
+
version: 2.0.4
|
75
79
|
description: Ruby CloudI API
|
76
80
|
email: mjtruog@protonmail.com
|
77
81
|
executables: []
|
@@ -100,8 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
104
|
- !ruby/object:Gem::Version
|
101
105
|
version: '0'
|
102
106
|
requirements: []
|
103
|
-
|
104
|
-
rubygems_version: 2.6.11
|
107
|
+
rubygems_version: 3.1.2
|
105
108
|
signing_key:
|
106
109
|
specification_version: 4
|
107
110
|
summary: CloudI API
|
metadata.gz.sig
CHANGED
Binary file
|