td-client 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/td/client/api/job.rb +7 -7
- data/lib/td/client/version.rb +1 -1
- data/spec/td/client/job_api_spec.rb +52 -18
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1319b82466ec1059629cb62dbe33cdacc0488d60
|
4
|
+
data.tar.gz: fd2b1bc6ee9211e3b225537d753bbef3a5fe6f19
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa93f95456b45d53a8621f2e22a87537fc8955c59954ef52155b71b7938b67d1794e5cba4b89b9f398f7089fe49638d4e15e216b2e73c76a8505b3eab770db45
|
7
|
+
data.tar.gz: dd3ef388960816cadae765c39f705778987c2490895e36c74704a076135349b7dbacfbc8cfa123314abfa718fcef68d725a2e9009c437df00fc6d60d057fb113
|
data/lib/td/client/api/job.rb
CHANGED
@@ -272,6 +272,9 @@ module Job
|
|
272
272
|
end
|
273
273
|
end
|
274
274
|
|
275
|
+
class HTTPServerException < StandardError
|
276
|
+
end
|
277
|
+
|
275
278
|
def job_result_download(job_id, format='msgpack', autodecode=true)
|
276
279
|
client, header = new_client
|
277
280
|
client.send_timeout = @send_timeout
|
@@ -305,12 +308,8 @@ module Job
|
|
305
308
|
end
|
306
309
|
when 206 # resuming
|
307
310
|
else
|
308
|
-
if res.status/100 == 5
|
309
|
-
|
310
|
-
sleep retry_delay
|
311
|
-
cumul_retry_delay += retry_delay
|
312
|
-
retry_delay *= 2
|
313
|
-
redo
|
311
|
+
if res.status/100 == 5
|
312
|
+
raise HTTPServerException
|
314
313
|
end
|
315
314
|
raise_error("Get job result failed", res)
|
316
315
|
end
|
@@ -331,7 +330,8 @@ module Job
|
|
331
330
|
|
332
331
|
# completed?
|
333
332
|
validate_content_length_with_range(response, current_total_chunk_size)
|
334
|
-
rescue Errno::ECONNREFUSED, Errno::ECONNRESET, Timeout::Error, EOFError,
|
333
|
+
rescue Errno::ECONNREFUSED, Errno::ECONNRESET, Timeout::Error, EOFError,
|
334
|
+
OpenSSL::SSL::SSLError, SocketError, HTTPServerException => e
|
335
335
|
if response # at least a chunk is downloaded
|
336
336
|
if etag = response.header['ETag'][0]
|
337
337
|
header['If-Range'] = etag
|
data/lib/td/client/version.rb
CHANGED
@@ -286,7 +286,7 @@ describe 'Job API' do
|
|
286
286
|
expect(api.job_result(12345)).to eq ['hello', 'world']
|
287
287
|
end
|
288
288
|
|
289
|
-
it '200->
|
289
|
+
it '200->206 can resume' do
|
290
290
|
sz = packed.bytesize / 3
|
291
291
|
stub_api_request(:get, '/v3/job/result/12345').
|
292
292
|
with(:query => {'format' => 'msgpack'}).
|
@@ -297,23 +297,6 @@ describe 'Job API' do
|
|
297
297
|
},
|
298
298
|
:body => packed[0, sz]
|
299
299
|
)
|
300
|
-
stub_api_request(:get, '/v3/job/result/12345').
|
301
|
-
with(
|
302
|
-
:headers => {
|
303
|
-
'If-Range' => '"abcdefghijklmn"',
|
304
|
-
'Range' => "bytes=#{sz}-",
|
305
|
-
},
|
306
|
-
:query => {'format' => 'msgpack'}
|
307
|
-
).
|
308
|
-
to_return(
|
309
|
-
:status => 500,
|
310
|
-
:headers => {
|
311
|
-
'Content-Length' => packed.bytesize - sz,
|
312
|
-
'Content-Range' => "bytes #{sz}-#{packed.bytesize-1}/#{packed.bytesize}",
|
313
|
-
'Etag' => '"abcdefghijklmn"',
|
314
|
-
},
|
315
|
-
:body => packed
|
316
|
-
)
|
317
300
|
stub_api_request(:get, '/v3/job/result/12345').
|
318
301
|
with(
|
319
302
|
:headers => {
|
@@ -783,6 +766,57 @@ describe 'Job API' do
|
|
783
766
|
end
|
784
767
|
end
|
785
768
|
|
769
|
+
context '500 -> 200' do
|
770
|
+
before do
|
771
|
+
sz = packed.bytesize / 3
|
772
|
+
count = 0
|
773
|
+
stub_api_request(:get, '/v3/job/result/12345').
|
774
|
+
with(:query => {'format' => format}).
|
775
|
+
to_return do
|
776
|
+
count += 1
|
777
|
+
if count == 1
|
778
|
+
{:status => 500}
|
779
|
+
else
|
780
|
+
{
|
781
|
+
:headers => {
|
782
|
+
'Content-Encoding' => content_encoding,
|
783
|
+
'Content-Length' => packed.bytesize,
|
784
|
+
'Etag' => '"abcdefghijklmn"',
|
785
|
+
},
|
786
|
+
:body => packed,
|
787
|
+
}
|
788
|
+
end
|
789
|
+
end
|
790
|
+
expect(api).to receive(:sleep).once
|
791
|
+
allow($stderr).to receive(:print)
|
792
|
+
allow($stderr).to receive(:puts)
|
793
|
+
end
|
794
|
+
context 'Content-Encoding: gzip' do
|
795
|
+
let (:content_encoding){ 'gzip' }
|
796
|
+
let (:packed){ gziped }
|
797
|
+
context 'msgpack' do
|
798
|
+
let (:format){ 'msgpack' }
|
799
|
+
it { is_expected.to eq formatted }
|
800
|
+
end
|
801
|
+
context 'json' do
|
802
|
+
let (:format){ 'json' }
|
803
|
+
it { is_expected.to eq formatted }
|
804
|
+
end
|
805
|
+
end
|
806
|
+
context 'Content-Encoding: deflate' do
|
807
|
+
let (:content_encoding){ 'deflate' }
|
808
|
+
let (:packed){ deflated }
|
809
|
+
context 'msgpack' do
|
810
|
+
let (:format){ 'msgpack' }
|
811
|
+
it { is_expected.to eq formatted }
|
812
|
+
end
|
813
|
+
context 'json' do
|
814
|
+
let (:format){ 'json' }
|
815
|
+
it { is_expected.to eq formatted }
|
816
|
+
end
|
817
|
+
end
|
818
|
+
end
|
819
|
+
|
786
820
|
context 'without autodecode' do
|
787
821
|
before do
|
788
822
|
sz = packed.bytesize / 3
|
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: 1.0.
|
4
|
+
version: 1.0.1
|
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: 2017-
|
11
|
+
date: 2017-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -200,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
200
200
|
version: '0'
|
201
201
|
requirements: []
|
202
202
|
rubyforge_project:
|
203
|
-
rubygems_version: 2.6.
|
203
|
+
rubygems_version: 2.6.11
|
204
204
|
signing_key:
|
205
205
|
specification_version: 4
|
206
206
|
summary: Treasure Data API library for Ruby
|