pinot-client 1.23.0 → 1.24.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0752e62700790e556388c588d9a305049a5935fc4da0afdefeecab830a9dde0c
4
- data.tar.gz: 4f5b1e86e84817febf245ec13498ec300ac68688c691eda58a2f4aafa79d219c
3
+ metadata.gz: b893ea9b2cefc1aca8cf86940399d36be6e071e88adc8023affb660d94ad8ce7
4
+ data.tar.gz: 539a393551125f7169975b0e641f4d1b60fd0cc6390fc1c9c10b4f86c4036db0
5
5
  SHA512:
6
- metadata.gz: 684b1e6b39e4e1f5f84bed527de2b50f056d101b81ba7621549454d81cc08f49dd044ce2d3dfa5cbb8084075339c0b4c45a89f32c7cf185f1aa73e6c9e40ec95
7
- data.tar.gz: 4ea1edf2abac766c358f0e99ed073a05e500d19fb77101475c96f6b82fa4d308a0025565bc1d8d55103da7c7af470654343f9b2b5b57366838e257853e493223
6
+ metadata.gz: 13d9d34e4a86ac6d62b15db000f4220e28cd5498e78cfdb42b2c9edcfac5645c68332a43048d96bc16089381fc4ea9c3d0ce429a95480c481766d1ebd9dfd6ca
7
+ data.tar.gz: 679bde8940819c309cbc351712cf2c4d4f3cfa1601e81ae023e5bf03a944404bd907b1f0a6fa44c2d5925909f3b8ce6533adf2a91cfea5aa284be7ab86afc9cf
@@ -171,6 +171,7 @@ module Pinot
171
171
 
172
172
  # HTTP status codes that map to specific error classes and are safe to retry
173
173
  HTTP_ERROR_MAP = {
174
+ "408" => QueryTimeoutError,
174
175
  "429" => RateLimitError,
175
176
  "503" => BrokerUnavailableError,
176
177
  "504" => BrokerUnavailableError
@@ -178,6 +179,10 @@ module Pinot
178
179
 
179
180
  RETRYABLE_HTTP_ERRORS = [RateLimitError, BrokerUnavailableError].freeze
180
181
 
182
+ # Pinot exception errorCode values that indicate query timeout.
183
+ # 250 = ExecutionTimeoutError (server-side), 400 = BrokerTimeoutError.
184
+ TIMEOUT_ERROR_CODES = [250, 400].freeze
185
+
181
186
  def initialize(http_client:, extra_headers: {}, timeout_ms: nil, logger: nil,
182
187
  max_retries: 0, retry_interval_ms: 200)
183
188
  @http_client = http_client
@@ -216,18 +221,24 @@ module Pinot
216
221
  raise TransportError, "http exception with HTTP status code #{resp.code}"
217
222
  end
218
223
 
219
- begin
224
+ broker_response = begin
220
225
  BrokerResponse.from_json(resp.body)
221
226
  rescue JSON::ParserError => e
222
227
  raise e.message
223
228
  end
229
+
230
+ if (timeout_ex = broker_response.exceptions.find { |ex| TIMEOUT_ERROR_CODES.include?(ex.error_code) })
231
+ raise QueryTimeoutError, timeout_ex.message
232
+ end
233
+
234
+ broker_response
224
235
  rescue *RETRYABLE_HTTP_ERRORS, *RETRYABLE_ERRORS => e
225
236
  if attempts < max_attempts
226
237
  sleep_ms = (@retry_interval_ms || 200) * (2 ** (attempts - 1))
227
238
  sleep(sleep_ms / 1000.0)
228
239
  retry
229
240
  end
230
- raise
241
+ raise Net::ReadTimeout === e || Net::WriteTimeout === e ? QueryTimeoutError.new(e.message) : e
231
242
  end
232
243
  end
233
244
 
data/lib/pinot/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pinot
2
- VERSION = "1.23.0"
2
+ VERSION = "1.24.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pinot-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.23.0
4
+ version: 1.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xiang Fu