cloudi 1.8.0 → 2.0.4

Sign up to get free protection for your applications and to get access to all the features.
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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
- 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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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
- 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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