cloudi 1.8.0 → 2.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.
Files changed (6) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/cloudi.rb +97 -36
  4. data.tar.gz.sig +3 -2
  5. metadata +34 -31
  6. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 59b71b8a2fa7b91fdb4821fdfc37b81d80b042d1
4
- data.tar.gz: 78ed6318f5d76447519cef2d738717dcb34002d4
2
+ SHA256:
3
+ metadata.gz: ec1f808877875a04bb8cc6d8032477b6b44e0e763ad360f38a3c48bd3cb3d233
4
+ data.tar.gz: 1d49c29f896452019b72277eadb93825dea75a3db72848bab5aa0b65bde83f69
5
5
  SHA512:
6
- metadata.gz: 9516794ea7bd534e8f23438d1b5fcc4a508b710e3d27c73798940bb4c73600278fabd0ca3053fe1b8071da5fbeb569b420024fb3768e49af364b96d8e814f0b6
7
- data.tar.gz: 4e5a665ee7997d60291f1357a2257dad6c6e19970a483fe560190dd4e5f1784e7eea3d5325d6e8cb255525dd64a661d76cec2731f366d84417f45ffb7b3623ea
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-2019 Michael Truog <mjtruog at protonmail dot com>
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 = 1000 # TIMEOUT_TERMINATE_MIN
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.new()
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.new()
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.new()
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.new()
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
- raise e
280
+ @terminate = true
281
+ return_null_response = true
279
282
  rescue TerminateException => e
280
- raise e
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
- API.assert{false}
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
- raise e
339
+ @terminate = true
340
+ return_null_response = true
328
341
  rescue TerminateException => e
329
- raise e
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
- API.assert{false}
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
- return false
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 text_key_value_parse(text)
626
- result = {}
627
- data = text.split(NULL.chr)
628
- (0...(data.length)).step(2).each do |i|
629
- value = result[data[i]]
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
- result[data[i]] = data[i + 1]
662
+ pairs[text_segments[i]] = text_segments[i + 1]
632
663
  elsif value.kind_of?(Array)
633
- value << data[i + 1]
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
- result[data[i]] = [value, data[i + 1]]
678
+ values.each do |value|
679
+ text_stream.write "#{key}\0#{value}\0"
680
+ end
636
681
  end
637
682
  end
638
- return result
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(message_info)
642
- return text_key_value_parse(message_info)
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 'Assertion failed !' unless yield # if $DEBUG
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
- private :text_key_value_parse
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
- ��}�v[�����C�&�$YI}N�4���q�p^1�43
2
- �=�v���� s��Rl[@����P��J��p=(���e�n4�!�֘Y�ٙ�E�o�-|�ۛE�,�W�A�hIlӏ�����k��m��C,~- R�%bƻ<
1
+ )30Lj2ӥ��%��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��K j+��ɪ�#��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: 1.8.0
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
- 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
- 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
- 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
- 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
- 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
- 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
- CbkfoR8Yc1CEI6FYOWqhO0JqpPfYzt0s27o3Ua2x8j6n+31iRkbArIX2IVEjvBNd
20
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
32
36
  -----END CERTIFICATE-----
33
- date: 2019-11-28 00:00:00.000000000 Z
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: '1.8'
45
+ version: '2.0'
42
46
  - - ">="
43
47
  - !ruby/object:Gem::Version
44
- version: 1.8.0
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: '1.8'
55
+ version: '2.0'
52
56
  - - ">="
53
57
  - !ruby/object:Gem::Version
54
- version: 1.8.0
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: '1.8'
65
+ version: '2.0'
62
66
  - - ">="
63
67
  - !ruby/object:Gem::Version
64
- version: 1.8.0
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: '1.8'
75
+ version: '2.0'
72
76
  - - ">="
73
77
  - !ruby/object:Gem::Version
74
- version: 1.8.0
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
- rubyforge_project:
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