istox 0.1.149.pre.1 → 0.1.150.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- istox (0.1.148)
4
+ istox (0.1.150.1)
5
5
  awesome_print
6
6
  binding_of_caller
7
7
  bunny (>= 2.12.0)
@@ -65,7 +65,7 @@ GEM
65
65
  arel (9.0.0)
66
66
  awesome_print (1.8.0)
67
67
  aws-eventstream (1.1.0)
68
- aws-sigv4 (1.1.1)
68
+ aws-sigv4 (1.1.3)
69
69
  aws-eventstream (~> 1.0, >= 1.0.2)
70
70
  binding_of_caller (0.8.0)
71
71
  debug_inspector (>= 0.0.1)
@@ -98,18 +98,18 @@ GEM
98
98
  ffi (1.12.2)
99
99
  globalid (0.4.2)
100
100
  activesupport (>= 4.2.0)
101
- google-protobuf (3.11.4-universal-darwin)
101
+ google-protobuf (3.11.4)
102
102
  googleapis-common-protos-types (1.0.5)
103
103
  google-protobuf (~> 3.11)
104
104
  graphlient (0.3.7)
105
105
  faraday
106
106
  faraday_middleware
107
107
  graphql-client
108
- graphql (1.10.6)
108
+ graphql (1.10.8)
109
109
  graphql-client (0.16.0)
110
110
  activesupport (>= 3.0)
111
111
  graphql (~> 1.8)
112
- grpc (1.28.0-universal-darwin)
112
+ grpc (1.28.0)
113
113
  google-protobuf (~> 3.11)
114
114
  googleapis-common-protos-types (~> 1.0)
115
115
  grpc-tools (1.28.0)
@@ -33,6 +33,7 @@ module Istox
33
33
  require 'istox/helpers/regex_helper'
34
34
  require 'istox/helpers/result_handler'
35
35
  require 'istox/helpers/redis'
36
+ require 'istox/helpers/dlm'
36
37
  require 'istox/helpers/remote_model_cache'
37
38
  require 'istox/models/blockchain_receipt'
38
39
  require 'istox/models/concerns/blockchain_receipt_query'
@@ -252,7 +252,6 @@ module Istox
252
252
  end
253
253
 
254
254
  def queue_ok?(conn, name)
255
- Logger "queue_ok? #{name}"
256
255
  ch = conn.create_channel
257
256
  begin
258
257
  q = ch.queue(name, passive: true)
@@ -1,10 +1,6 @@
1
- require 'redlock'
2
-
3
1
  module Istox
4
2
  class DLMBoot
5
3
  class << self
6
- private
7
-
8
4
  def lock(key, timeout = 3600, db)
9
5
  loop do
10
6
  break if ::Istox::RedisBoot.sets(key, 1, {nx: true, px: timeout}, db)
@@ -54,6 +54,40 @@ module Istox
54
54
  end
55
55
 
56
56
  @connection = ::Istox::BunnyBoot.connection
57
+
58
+ # Start a thread to sweep @channel
59
+ Thread.new do
60
+ loop do
61
+ Thread.new do
62
+ sleep 60 * 5
63
+
64
+ tid = []
65
+ Thread.list.each do |t|
66
+ tid << t.object_id
67
+ end
68
+ # log.info("Current tid is #{tid}")
69
+
70
+ tid_c = @channel.keys
71
+ # log.info("@channel tid is #{tid_c}")
72
+
73
+ tid_c.each do |t|
74
+ unless tid.include? t
75
+ # Close channel and remove it from @channel
76
+ log.debug("Thread #{t} doesn't exist any more, close channel for it and remove it from @channel")
77
+ @channel[t]['confirm-0'].close
78
+ @channel[t]['confirm-1'].close
79
+ @channel[t]['noconfirm'].close
80
+ @channel.delete t
81
+
82
+ # Remove exchange from @exchange
83
+ @exchanges.delete t
84
+ end
85
+ end
86
+ end.join
87
+ end
88
+ end
89
+
90
+ @connection
57
91
  end
58
92
  end
59
93
 
@@ -77,39 +111,6 @@ module Istox
77
111
  @channel[Thread.current.object_id]['confirm-1'] = ::Istox::BunnyBoot.channel(connection, confirm: true)
78
112
  @channel[Thread.current.object_id]['noconfirm'] = ::Istox::BunnyBoot.channel(connection, confirm: false)
79
113
 
80
- threadId = Thread.current.object_id
81
- # Start new thread on receiving ACK from 'confirm-1' channel on the specified thread
82
- Thread.new do
83
- loop do
84
- sleep 5
85
-
86
- begin
87
- success = @channel[threadId]['confirm-1'].wait_for_confirms
88
- if success
89
- ::Istox::BunnyBoot.del_tracker_on_channel @channel[threadId]['confirm-1'].id
90
- else
91
- @channel[threadId]['confirm-1'].nacked_set.each do |n|
92
- log.debug("Publish Error[Async #{threadId}]: UNACK delivery tag is #{n}, republish message")
93
- eid = ::Istox::BunnyBoot.find_tracker_on_channel @channel[threadId]['confirm-1'].id, n, 'eid'
94
- payload = ::Istox::BunnyBoot.find_tracker_on_channel @channel[threadId]['confirm-1'].id, n, 'payload'
95
- payload = JSON.parse(payload, :symbolize_names => true) unless payload.nil?
96
- options = ::Istox::BunnyBoot.find_tracker_on_channel @channel[threadId]['confirm-1'].id, n, 'options'
97
- options = JSON.parse(options, :symbolize_names => true) unless options.nil?
98
- if options.nil?
99
- routing_key = nil
100
- else
101
- routing_key = options.delete :routing_key
102
- options[:delivery_tag] = n
103
- end
104
- publish(exchange: eid, routing_key: routing_key, message: payload, options: options)
105
- end
106
- end
107
- rescue => e
108
- # log.debug "wait_for_confirm error happening: #{e}"
109
- end
110
- end
111
- end
112
-
113
114
  @channel[Thread.current.object_id]
114
115
  end
115
116
 
@@ -132,7 +133,8 @@ module Istox
132
133
 
133
134
  def channel_from_mode(mode)
134
135
  if mode == 0 || mode == 1
135
- channel["confirm-#{mode.to_s}"]
136
+ # Currently we use mode 0 only
137
+ channel["confirm-0"]
136
138
  else
137
139
  channel['noconfirm']
138
140
  end
@@ -234,7 +236,16 @@ module Istox
234
236
  sleep 1
235
237
  do_publish(ex,options,message)
236
238
  rescue => e
237
- log.debug "Error happens: #{e}"
239
+ log.debug "Error happens: #{e.message}"
240
+
241
+ # If the error indicates that the channel is already closed
242
+ # then clear hash @channel and @exchange
243
+ if e.message.include? "cannot use a closed channel"
244
+ @channel.delete Thread.current.object_id
245
+ @exchanges.delete Thread.current.object_id
246
+ ex = exchange(eid)
247
+ do_publish(ex, options, message)
248
+ end
238
249
  end
239
250
  end
240
251
  end
@@ -48,7 +48,7 @@ module Istox
48
48
  end
49
49
  end
50
50
 
51
- def get(key:, field:, auto_convert_openstruct: true)
51
+ def get(key:, field:)
52
52
  raise 'You must provide a callback block if cache doesnt exist' unless block_given?
53
53
 
54
54
  key = key.to_s
@@ -60,7 +60,7 @@ module Istox
60
60
 
61
61
  if result.present?
62
62
  begin
63
- return auto_convert_openstruct ? ::Istox::CommonHelper.to_open_struct(JSON.parse(result)) : result
63
+ return ::Istox::CommonHelper.to_open_struct(JSON.parse(result))
64
64
  rescue StandardError => e
65
65
  log.warn('Unable to process result from cache store, is it not a json?')
66
66
  log.warn(e)
@@ -104,7 +104,7 @@ module Istox
104
104
  break unless ::Istox::BunnyBoot.queue_single_consumer? consumer_key
105
105
 
106
106
  flag = false
107
- ::Istox::DLMBoot.lock("peatio:#{consumer_key}:locking", 5) do
107
+ ::Istox::DLMBoot.lock("peatio:#{consumer_key}:locking", 10) do
108
108
  flag = ::Istox::BunnyBoot.queue_ok? @conn, queue.name
109
109
  end
110
110
  break if flag
@@ -1,3 +1,3 @@
1
1
  module Istox
2
- VERSION = '0.1.149-1'.freeze
2
+ VERSION = '0.1.150.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: istox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.149.pre.1
4
+ version: 0.1.150.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Siong Leng
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-08 00:00:00.000000000 Z
11
+ date: 2020-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -471,11 +471,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
471
471
  version: '0'
472
472
  required_rubygems_version: !ruby/object:Gem::Requirement
473
473
  requirements:
474
- - - ">"
474
+ - - ">="
475
475
  - !ruby/object:Gem::Version
476
- version: 1.3.1
476
+ version: '0'
477
477
  requirements: []
478
- rubygems_version: 3.0.3
478
+ rubygems_version: 3.0.8
479
479
  signing_key:
480
480
  specification_version: 4
481
481
  summary: istox backend shared gem