receptor_controller-client 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7e0fca40eecf936d8ef48f10f5ff0a9c0a8f285496d504a4942b85f5ad43b679
4
- data.tar.gz: c48de26017a7f7b2193d13603abe1ebfafaf55974efd1e1cc5700e89b3097394
3
+ metadata.gz: f99fb38eec5c760bd12813db5026e87e6a344965ecc95e64c73599a14fd369de
4
+ data.tar.gz: a494ce84703f398a2716b7bde039b4d5cffe7a0390128ebdc660c2953998bbbd
5
5
  SHA512:
6
- metadata.gz: 9cabdb3d3176a0d6591a4b4fb06422481cf51f248edf669db455fc9f1ab9a98c19887d2b3b4780568be92058477d424164c158f49bc5ec9afbe1630becd273d6
7
- data.tar.gz: fbe4d361bb3dfff586d6e6da8391623a5a92fcdc224a15c6c3ace6379105748562b6bc87f360d84556170b271298b3661985b88bddd3b8d8fe9ab60e0e8f4e6c
6
+ metadata.gz: 26d9b2d4728bbb03b84903d9642937123a3a6226e1c7765d97cc3b0cdc618e75b92d3c35e1642b6d91fa95b74e8459f93cac4e96496e8e275cdb7cefe7a01511
7
+ data.tar.gz: 9761de4851573e324966bde349ff0da97072cf220c81f57d8586c09616c5618f085e30f987489763bfa443013130542930c01a73c4cfaf18a9a538c7ef34c8bb
@@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.0.5] - 2020-08-11
10
+ ### Added
11
+ - Unique Persist-ref for every response worker #18
12
+
9
13
  ## [0.0.4] - 2020-08-04
10
14
  ### Added
11
15
  - Default Kafka ACK to true
@@ -20,7 +24,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
20
24
  ### Added
21
25
  - Added extra logging for messages
22
26
 
23
- [Unreleased]: https://github.com/RedHatInsights/receptor_controller-client-ruby/compare/v0.0.4...HEAD
27
+ [Unreleased]: https://github.com/RedHatInsights/receptor_controller-client-ruby/compare/v0.0.5...HEAD
28
+ [0.0.5]: https://github.com/RedHatInsights/receptor_controller-client-ruby/releases/tag/v0.0.5
24
29
  [0.0.4]: https://github.com/RedHatInsights/receptor_controller-client-ruby/releases/tag/v0.0.4
25
30
  [0.0.3]: https://github.com/RedHatInsights/receptor_controller-client-ruby/releases/tag/v0.0.3
26
31
  [0.0.2]: https://github.com/RedHatInsights/receptor_controller-client-ruby/releases/tag/v0.0.2
@@ -42,7 +42,7 @@ module ReceptorController
42
42
  @queue_auto_ack = true
43
43
  @queue_host = nil
44
44
  @queue_max_bytes = nil
45
- @queue_persist_ref = nil
45
+ @queue_persist_ref = "receptor-client.#{SecureRandom.uuid}"
46
46
  @queue_port = nil
47
47
  @queue_topic = 'platform.receptor-controller.responses'
48
48
 
@@ -20,7 +20,7 @@ module ReceptorController
20
20
 
21
21
  msg_id = JSON.parse(response.body)['id']
22
22
 
23
- logger.debug("Receptor response: registering message #{msg_id}".tap { |msg| msg << " req: #{body[:payload]}" if ENV["LOG_ALL_RECEPTOR_MESSAGES"]&.to_i != 0 })
23
+ logger.debug("Receptor response [#{ReceptorController::Client::Configuration.default.queue_persist_ref}]: registering message #{msg_id}, href_slug: #{body[:payload]["href_slug"]}")
24
24
  # registers message id for kafka responses
25
25
  response_worker.register_message(msg_id, self)
26
26
  wait_for_response(msg_id)
@@ -48,6 +48,7 @@ module ReceptorController
48
48
 
49
49
  # registers message id for kafka responses
50
50
  response_worker.register_message(msg_id, self)
51
+ logger.debug("Receptor response [#{ReceptorController::Client::Configuration.default.queue_persist_ref}]: registering message #{msg_id}, href_slug: #{body[:payload]["href_slug"]}")
51
52
 
52
53
  msg_id
53
54
  else
@@ -89,7 +89,7 @@ module ReceptorController
89
89
  process_message(message)
90
90
  end
91
91
  rescue => err
92
- logger.error("Exception in kafka listener: #{err}\n#{err.backtrace.join("\n")}")
92
+ logger.error(response_log("Exception in kafka listener: #{err}\n#{err.backtrace.join("\n")}"))
93
93
  ensure
94
94
  client&.close
95
95
  end
@@ -98,7 +98,7 @@ module ReceptorController
98
98
  response = JSON.parse(message.payload)
99
99
 
100
100
  if (message_id = response['in_response_to'])
101
- logger.debug("Receptor response for message #{message_id}: serial: #{response["serial"]}, type: #{response['message_type']}, payload: #{response['payload'] || "n/a"}")
101
+ logger.debug(response_log("Received message #{message_id}: serial: #{response["serial"]}, type: #{response['message_type']}, payload: #{response['payload'] || "n/a"}"))
102
102
  if (callbacks = registered_messages[message_id]).present?
103
103
  # Reset last_checked_at to avoid timeout in multi-response messages
104
104
  reset_last_checked_at(callbacks)
@@ -121,6 +121,7 @@ module ReceptorController
121
121
  callbacks[:receiver].send(callbacks[:response_callback], message_id, message_type, payload)
122
122
  else
123
123
  # Send the callback to release the thread.
124
+ logger.warn(response_log("Unexpected type | message #{message_id}, type: #{message_type}"))
124
125
  callbacks[:receiver].send(callbacks[:response_callback], message_id, message_type, payload)
125
126
  end
126
127
 
@@ -128,31 +129,31 @@ module ReceptorController
128
129
  if callbacks[:received_msgs] == callbacks[:total_msgs]
129
130
  registered_messages.delete(message_id)
130
131
  callbacks[:receiver].send(callbacks[:response_callback], message_id, EOF, payload)
131
- logger.debug("Receptor Message #{message_id} complete, total bytes: #{callbacks[:msg_size]}")
132
+ logger.debug(response_log("Message #{message_id} complete, total bytes: #{callbacks[:msg_size]}"))
132
133
  end
133
134
 
134
- logger.debug("Receptor response: OK | message: #{message_id}, serial: #{response["serial"]}, type: #{message_type}, payload: #{payload || "n/a"}")
135
+ logger.debug(response_log("OK | message: #{message_id}, serial: #{response["serial"]}, type: #{message_type}, payload: #{payload || "n/a"}"))
135
136
  else
136
137
  #
137
138
  # Response Error
138
139
  #
139
140
  registered_messages.delete(message_id)
140
141
 
141
- logger.error("Receptor response: ERROR | message #{message_id} (#{response})")
142
+ logger.error(response_log("ERROR | message #{message_id} (#{response})"))
142
143
 
143
144
  callbacks[:receiver].send(callbacks[:error_callback], message_id, response['code'], response['payload'])
144
145
  end
145
146
  elsif ENV["LOG_ALL_RECEPTOR_MESSAGES"]&.to_i != 0
146
147
  # noop, it's not error if not registered, can be processed by another pod
147
- logger.debug("Receptor response unhandled: #{message_id} (#{response['code']})")
148
+ logger.debug(response_log("NOT REGISTERED | #{message_id} (#{response['code']})"))
148
149
  end
149
150
  else
150
- logger.error("Receptor response: Message id (in_response_to) not received! #{response}")
151
+ logger.error(response_log("MISSING | Message id (in_response_to) not received! #{response}"))
151
152
  end
152
153
  rescue JSON::ParserError => e
153
- logger.error("Receptor response: Failed to parse Kafka response (#{e.message})\n#{message.payload}")
154
+ logger.error(response_log("Failed to parse Kafka response (#{e.message})\n#{message.payload}"))
154
155
  rescue => e
155
- logger.error("Receptor response: #{e}\n#{e.backtrace.join("\n")}")
156
+ logger.error(response_log("#{e}\n#{e.backtrace.join("\n")}"))
156
157
  ensure
157
158
  message.ack unless config.queue_auto_ack
158
159
  end
@@ -213,12 +214,15 @@ module ReceptorController
213
214
  end
214
215
 
215
216
  # No persist_ref here, because all instances (pods) needs to receive kafka message
217
+ # TODO: temporary changed to unique persist_ref
216
218
  def queue_opts
217
- opts = {:service => config.queue_topic,
218
- :auto_ack => config.queue_auto_ack}
219
- opts[:max_bytes] = config.queue_max_bytes if config.queue_max_bytes
220
- opts[:persist_ref] = config.queue_persist_ref if config.queue_persist_ref
221
- opts
219
+ return @queue_opts if @queue_opts
220
+
221
+ @queue_opts = {:service => config.queue_topic,
222
+ :auto_ack => config.queue_auto_ack}
223
+ @queue_opts[:max_bytes] = config.queue_max_bytes if config.queue_max_bytes
224
+ @queue_opts[:persist_ref] = config.queue_persist_ref if config.queue_persist_ref
225
+ @queue_opts
222
226
  end
223
227
 
224
228
  def default_messaging_opts
@@ -229,5 +233,9 @@ module ReceptorController
229
233
  :client_ref => "receptor_client-responses-#{Time.now.to_i}", # A reference string to identify the client
230
234
  }
231
235
  end
236
+
237
+ def response_log(message)
238
+ "Receptor Response [#{queue_opts[:persist_ref]}]: #{message}"
239
+ end
232
240
  end
233
241
  end
@@ -1,5 +1,5 @@
1
1
  module ReceptorController
2
2
  class Client
3
- VERSION = "0.0.4".freeze
3
+ VERSION = "0.0.5".freeze
4
4
  end
5
5
  end
@@ -9,7 +9,13 @@ RSpec.describe ReceptorController::Client::ResponseWorker do
9
9
 
10
10
  before do
11
11
  allow(logger).to receive_messages(%i[debug info warn error fatal])
12
- allow(config).to receive_messages(:queue_auto_ack => false, :response_timeout => 0, :response_timeout_poll_time => 0)
12
+ allow(config).to receive_messages(:queue_auto_ack => false,
13
+ :queue_max_bytes => nil,
14
+ :queue_persist_ref => 'consumer-group-1',
15
+ :queue_topic => 'receptor.kafka.topic',
16
+ :response_timeout => 0,
17
+ :response_timeout_poll_time => 0,
18
+ )
13
19
  end
14
20
 
15
21
  describe "#register_message" do
@@ -87,7 +93,7 @@ RSpec.describe ReceptorController::Client::ResponseWorker do
87
93
  end
88
94
 
89
95
  it "logs error" do
90
- expect(logger).to receive(:error).with(/Receptor response: Failed to parse Kafka response/)
96
+ expect(logger).to receive(:error).with(/Failed to parse Kafka response/)
91
97
 
92
98
  subject.send(:process_message, message)
93
99
  end
@@ -97,7 +103,7 @@ RSpec.describe ReceptorController::Client::ResponseWorker do
97
103
  let(:payload) { {'code' => 0, 'message_type' => 'response', 'payload' => response_body} }
98
104
 
99
105
  it "logs error" do
100
- expect(logger).to receive(:error).with(/Receptor response: Message id \(in_response_to\) not received!/)
106
+ expect(logger).to receive(:error).with(/Message id \(in_response_to\) not received!/)
101
107
 
102
108
  subject.send(:process_message, message)
103
109
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: receptor_controller-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Slemr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-04 00:00:00.000000000 Z
11
+ date: 2020-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -261,8 +261,8 @@ signing_key:
261
261
  specification_version: 4
262
262
  summary: Client for communication with Platform Receptor Controller - Gem
263
263
  test_files:
264
- - spec/receptor_controller/directive_blocking_spec.rb
265
- - spec/receptor_controller/response_worker_spec.rb
266
264
  - spec/receptor_controller/client_spec.rb
265
+ - spec/receptor_controller/response_worker_spec.rb
267
266
  - spec/receptor_controller/directive_non_blocking_spec.rb
267
+ - spec/receptor_controller/directive_blocking_spec.rb
268
268
  - spec/spec_helper.rb