cloudi 1.7.4 → 2.0.2
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/cloudi.rb +104 -36
- metadata +34 -31
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cc66b5b4c55778756084c1ee148acc705cfa1b8d839a7ea8febb9a6004bd0ad2
|
4
|
+
data.tar.gz: 667a4d1757a157fc95b998f2e86bb0684f47d578da9096c5791d7b349715495b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 719e2a63d056913d4dee29c91a0bafb0d9b9e4de20232f6a56c96e731ba61117114063a893330c844df37b278ed3ef5858a27b76e420538a51bbe68a56f9403b
|
7
|
+
data.tar.gz: 43b9b474e3842568dba81e38944a679db1f84e3e04933b1e07948ea6feca8e5dd70d640a250b7eb0bc3673524dee56c558caec4e26ff258104cb2cc4c2df2d3d
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.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]
|
@@ -615,35 +646,66 @@ module CloudI
|
|
615
646
|
return poll_request(timeout, true)
|
616
647
|
end
|
617
648
|
|
618
|
-
def
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
649
|
+
def shutdown(reason=nil)
|
650
|
+
if reason.nil?
|
651
|
+
reason = ''
|
652
|
+
end
|
653
|
+
send(Erlang.term_to_binary([:shutdown, reason]))
|
654
|
+
end
|
655
|
+
|
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]]
|
623
661
|
if value == nil
|
624
|
-
|
662
|
+
pairs[text_segments[i]] = text_segments[i + 1]
|
625
663
|
elsif value.kind_of?(Array)
|
626
|
-
value <<
|
664
|
+
value << text_segments[i + 1]
|
627
665
|
else
|
628
|
-
|
666
|
+
pairs[text_segments[i]] = [value, text_segments[i + 1]]
|
629
667
|
end
|
630
668
|
end
|
631
|
-
return
|
669
|
+
return pairs
|
632
670
|
end
|
633
671
|
|
634
|
-
def
|
635
|
-
|
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"
|
677
|
+
else
|
678
|
+
values.each do |value|
|
679
|
+
text_stream.write "#{key}\0#{value}\0"
|
680
|
+
end
|
681
|
+
end
|
682
|
+
end
|
683
|
+
text = text_stream.string
|
684
|
+
if response and text == ''
|
685
|
+
return "\0"
|
686
|
+
else
|
687
|
+
return text
|
688
|
+
end
|
689
|
+
end
|
690
|
+
|
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)
|
636
697
|
end
|
637
698
|
|
638
699
|
def self.assert
|
639
|
-
raise
|
700
|
+
raise AssertionError unless yield # if $DEBUG
|
640
701
|
end
|
641
702
|
|
642
703
|
private :null_response
|
643
704
|
private :callback
|
644
705
|
private :handle_events
|
645
706
|
private :poll_request
|
646
|
-
|
707
|
+
private_class_method :text_pairs_parse
|
708
|
+
private_class_method :text_pairs_new
|
647
709
|
private
|
648
710
|
|
649
711
|
def send(data)
|
@@ -729,5 +791,11 @@ module CloudI
|
|
729
791
|
end
|
730
792
|
attr_reader :timeout
|
731
793
|
end
|
794
|
+
|
795
|
+
class AssertionError < Exception
|
796
|
+
end
|
797
|
+
|
798
|
+
class FatalError < Exception
|
799
|
+
end
|
732
800
|
end
|
733
801
|
|
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.2
|
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-05-27 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.2
|
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.2
|
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.2
|
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.2
|
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.7.7
|
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
|