td-client 0.8.63 → 0.8.64
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 +8 -8
- data/lib/td/client/api.rb +125 -39
- data/lib/td/client/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZWZhMDhjOTJhMDg4YWViMWMxYjQ5ZTVlYmM1MTBmNGMxYTNlNzA5Nw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NmIwNjQ1OWRmNDI1MGIyNmQ3NmIzZjc5MzEzNjg2MmRiM2M3MDVmMw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZDBjMjA0MzkyMzMxMzBlOWI4MGE4MTJhYTc3ZGIwZTUzYjdmYWIyOWE5Y2Y2
|
10
|
+
Mzk0MTA3MmFhZWFiZGE5N2E3ZDhjY2M2ZWJjYjY3ZDg0YjY1Yzc4MWNhYzEy
|
11
|
+
NTUyYzU0MzIzMTI3YWNhM2UwZmVmZjVkMTFlNWNjYmM4OGRiYzA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ODJlY2Y0ODAzNjA4OGJkOWQxYTc0MmVlMWI1YWIxOGNkMGNjZjgyNzQ3ZGEw
|
14
|
+
ZGQ2NzE2ZDk3YTZjYTUyMGQ4MDRhYzNiNmI0NmIyMzQ4OWJjZTQ3MjQ0M2Zm
|
15
|
+
Y2QwNGZlNTMyYzEzNDM0NmVmMGRmZWIyMmFkNWM5MDY2ZjBiYjU=
|
data/lib/td/client/api.rb
CHANGED
@@ -53,6 +53,7 @@ class API
|
|
53
53
|
@connect_timeout = opts[:connect_timeout] || 60
|
54
54
|
@read_timeout = opts[:read_timeout] || 600
|
55
55
|
@send_timeout = opts[:send_timeout] || 600
|
56
|
+
@retry_post_requests = opts[:retry_post_requests] || false
|
56
57
|
|
57
58
|
case uri.scheme
|
58
59
|
when 'http', 'https'
|
@@ -1235,17 +1236,57 @@ class API
|
|
1235
1236
|
puts "DEBUG: params: " + params.to_s
|
1236
1237
|
end
|
1237
1238
|
|
1238
|
-
|
1239
|
-
|
1240
|
-
|
1241
|
-
|
1242
|
-
|
1243
|
-
|
1244
|
-
|
1239
|
+
# up to 7 retries with exponential (base 2) back-off starting at 'retry_delay'
|
1240
|
+
retry_delay = 5
|
1241
|
+
max_cumul_retry_delay = 600
|
1242
|
+
cumul_retry_delay = 0
|
1243
|
+
|
1244
|
+
# for both exceptions and 500+ errors retrying is enabled by default.
|
1245
|
+
# The total number of retries cumulatively should not exceed 10 minutes / 600 seconds
|
1246
|
+
response = nil
|
1247
|
+
begin # this block is to allow retry (redo) in the begin part of the begin-rescue block
|
1248
|
+
begin
|
1249
|
+
if block
|
1250
|
+
response = http.request(request) {|res|
|
1251
|
+
block.call(res)
|
1252
|
+
}
|
1253
|
+
else
|
1254
|
+
response = http.request(request)
|
1255
|
+
end
|
1256
|
+
|
1257
|
+
status = response.code.to_i
|
1258
|
+
# retry if the HTTP error code is 500 or higher and we did not run out of retrying attempts
|
1259
|
+
if !block_given? && status >= 500 && cumul_retry_delay <= max_cumul_retry_delay
|
1260
|
+
$stderr.puts "Error #{status}: #{get_error(response)}. Retrying after #{retry_delay} seconds..."
|
1261
|
+
sleep retry_delay
|
1262
|
+
cumul_retry_delay += retry_delay
|
1263
|
+
retry_delay *= 2
|
1264
|
+
redo # restart from beginning of do-while loop
|
1265
|
+
end
|
1266
|
+
rescue Errno::ECONNREFUSED, Errno::ECONNRESET, Timeout::Error, EOFError, OpenSSL::SSL::SSLError, SocketError => e
|
1267
|
+
if block_given?
|
1268
|
+
raise e
|
1269
|
+
end
|
1270
|
+
$stderr.print "#{e.class}: #{e.message}. "
|
1271
|
+
if cumul_retry_delay <= max_cumul_retry_delay
|
1272
|
+
$stderr.puts "Retrying after #{retry_delay} seconds..."
|
1273
|
+
sleep retry_delay
|
1274
|
+
cumul_retry_delay += retry_delay
|
1275
|
+
retry_delay *= 2
|
1276
|
+
retry
|
1277
|
+
else
|
1278
|
+
$stderr.puts "Retrying stopped after #{max_cumul_retry_delay} seconds."
|
1279
|
+
raise e
|
1280
|
+
end
|
1281
|
+
rescue => e
|
1282
|
+
raise e
|
1283
|
+
end
|
1284
|
+
end while false
|
1245
1285
|
|
1246
1286
|
unless ENV['TD_CLIENT_DEBUG'].nil?
|
1247
1287
|
puts "DEBUG: REST GET response:"
|
1248
1288
|
puts "DEBUG: header: " + response.header.to_s
|
1289
|
+
puts "DEBUG: status: " + response.code.to_s
|
1249
1290
|
puts "DEBUG: body: " + response.body.to_s
|
1250
1291
|
end
|
1251
1292
|
|
@@ -1289,7 +1330,53 @@ class API
|
|
1289
1330
|
request = Net::HTTP::Post.new(path, header)
|
1290
1331
|
end
|
1291
1332
|
|
1292
|
-
|
1333
|
+
# up to 7 retries with exponential (base 2) back-off starting at 'retry_delay'
|
1334
|
+
retry_delay = 5
|
1335
|
+
max_cumul_retry_delay = 600
|
1336
|
+
cumul_retry_delay = 0
|
1337
|
+
|
1338
|
+
# for both exceptions and 500+ errors retrying can be enabled by initialization
|
1339
|
+
# parameter 'retry_post_requests'. The total number of retries cumulatively
|
1340
|
+
# should not exceed 10 minutes / 600 seconds
|
1341
|
+
response = nil
|
1342
|
+
begin # this block is to allow retry (redo) in the begin part of the begin-rescue block
|
1343
|
+
begin
|
1344
|
+
response = http.request(request)
|
1345
|
+
|
1346
|
+
# if the HTTP error code is 500 or higher and the user requested retrying
|
1347
|
+
# on post request, attempt a retry
|
1348
|
+
status = response.code.to_i
|
1349
|
+
if @retry_post_requests && status >= 500 && cumul_retry_delay <= max_cumul_retry_delay
|
1350
|
+
$stderr.puts "Error #{status}: #{get_error(response)}. Retrying after #{retry_delay} seconds..."
|
1351
|
+
sleep retry_delay
|
1352
|
+
cumul_retry_delay += retry_delay
|
1353
|
+
retry_delay *= 2
|
1354
|
+
redo # restart from beginning of do-while loop
|
1355
|
+
end
|
1356
|
+
rescue Errno::ECONNREFUSED, Errno::ECONNRESET, Timeout::Error, EOFError, OpenSSL::SSL::SSLError, SocketError => e
|
1357
|
+
$stderr.print "#{e.class}: #{e.message}. "
|
1358
|
+
if @retry_post_requests && cumul_retry_delay <= max_cumul_retry_delay
|
1359
|
+
$stderr.puts "Retrying after #{retry_delay} seconds..."
|
1360
|
+
sleep retry_delay
|
1361
|
+
cumul_retry_delay += retry_delay
|
1362
|
+
retry_delay *= 2
|
1363
|
+
retry
|
1364
|
+
else
|
1365
|
+
$stderr.puts "Retrying stopped after #{max_cumul_retry_delay} seconds."
|
1366
|
+
raise e
|
1367
|
+
end
|
1368
|
+
rescue => e
|
1369
|
+
raise e
|
1370
|
+
end
|
1371
|
+
end while false
|
1372
|
+
|
1373
|
+
unless ENV['TD_CLIENT_DEBUG'].nil?
|
1374
|
+
puts "DEBUG: REST POST response:"
|
1375
|
+
puts "DEBUG: header: " + response.header.to_s
|
1376
|
+
puts "DEBUG: status: " + response.code.to_s
|
1377
|
+
puts "DEBUG: body: <omitted>"
|
1378
|
+
end
|
1379
|
+
|
1293
1380
|
return [response.code, response.body, response]
|
1294
1381
|
end
|
1295
1382
|
|
@@ -1316,6 +1403,14 @@ class API
|
|
1316
1403
|
end
|
1317
1404
|
|
1318
1405
|
response = client.put(target, body, header)
|
1406
|
+
|
1407
|
+
unless ENV['TD_CLIENT_DEBUG'].nil?
|
1408
|
+
puts "DEBUG: REST PUT response:"
|
1409
|
+
puts "DEBUG: header: " + response.header.to_s
|
1410
|
+
puts "DEBUG: status: " + response.code.to_s
|
1411
|
+
puts "DEBUG: body: <omitted>"
|
1412
|
+
end
|
1413
|
+
|
1319
1414
|
return [response.code.to_s, response.body, response]
|
1320
1415
|
end
|
1321
1416
|
|
@@ -1372,48 +1467,39 @@ class API
|
|
1372
1467
|
@ssl_ca_file ||= File.join(File.dirname(__FILE__), '..', '..', '..', 'data', 'ca-bundle.crt')
|
1373
1468
|
end
|
1374
1469
|
|
1375
|
-
def
|
1376
|
-
status_code = res.code.to_s
|
1470
|
+
def get_error(res)
|
1377
1471
|
begin
|
1378
1472
|
js = JSON.load(res.body)
|
1379
1473
|
if js.nil?
|
1380
1474
|
error_msg = if res.respond_to?(:message)
|
1381
1475
|
res.message # Net::HTTP
|
1382
1476
|
else
|
1383
|
-
res.reason #
|
1477
|
+
res.reason # HttpClient
|
1384
1478
|
end
|
1385
1479
|
else
|
1386
1480
|
error_msg = js['message'] || js['error']
|
1387
1481
|
end
|
1388
|
-
|
1389
|
-
if klass
|
1390
|
-
raise klass, "#{status_code}: #{msg}: #{error_msg}"
|
1391
|
-
elsif status_code == "404"
|
1392
|
-
raise NotFoundError, "#{msg}: #{error_msg}"
|
1393
|
-
elsif status_code == "409"
|
1394
|
-
raise AlreadyExistsError, "#{msg}: #{error_msg}"
|
1395
|
-
elsif status_code == "401"
|
1396
|
-
raise AuthError, "#{msg}: #{error_msg}"
|
1397
|
-
elsif status_code == "403"
|
1398
|
-
raise ForbiddenError, "#{msg}: #{error_msg}"
|
1399
|
-
else
|
1400
|
-
raise APIError, "#{status_code}: #{msg}: #{error_msg}"
|
1401
|
-
end
|
1402
|
-
|
1403
1482
|
rescue JSON::ParserError
|
1404
|
-
|
1405
|
-
|
1406
|
-
|
1407
|
-
|
1408
|
-
|
1409
|
-
|
1410
|
-
|
1411
|
-
|
1412
|
-
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1416
|
-
|
1483
|
+
error_msg = res.body
|
1484
|
+
end
|
1485
|
+
error_msg
|
1486
|
+
end
|
1487
|
+
|
1488
|
+
def raise_error(msg, res, klass=nil)
|
1489
|
+
status_code = res.code.to_s
|
1490
|
+
error_msg = get_error(res)
|
1491
|
+
if klass
|
1492
|
+
raise klass, "#{status_code}: #{msg}: #{res.body}"
|
1493
|
+
elsif status_code == "404"
|
1494
|
+
raise NotFoundError, "#{msg}: #{res.body}"
|
1495
|
+
elsif status_code == "409"
|
1496
|
+
raise AlreadyExistsError, "#{msg}: #{res.body}"
|
1497
|
+
elsif status_code == "401"
|
1498
|
+
raise AuthError, "#{msg}: #{res.body}"
|
1499
|
+
elsif status_code == "403"
|
1500
|
+
raise ForbiddenError, "#{msg}: #{res.body}"
|
1501
|
+
else
|
1502
|
+
raise APIError, "#{status_code}: #{msg}: #{res.body}"
|
1417
1503
|
end
|
1418
1504
|
# TODO error
|
1419
1505
|
end
|
data/lib/td/client/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: td-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.64
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Treasure Data, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|