presto-client 0.5.3 → 0.5.4

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
  SHA1:
3
- metadata.gz: 7db20f4ae1e231e427180f5067f11b081ee3c72d
4
- data.tar.gz: 45e90ed802562a7dd1ebeb615223d63950deec75
3
+ metadata.gz: fc11fc0cab121eb735018084081c77fa034847f6
4
+ data.tar.gz: 19812b673f76893200f7b691444176a06b995bf7
5
5
  SHA512:
6
- metadata.gz: 5dd22c3b79f93026c6399fbe2192648f7bf7b98ec2071e5dd283b55251c9366dd29b18418d918a2755bbb222793c2c03e642acbd6f772ca02d991490c3736439
7
- data.tar.gz: d4c5c70aabb19e5137d447308eccc597c80dc65d50a9ad0b53aa943d7f87d6b1cba37e4d21dfa042fb1135a0a3207726dcac7678feb0ccd46819c9971486e157
6
+ metadata.gz: 4494d03f05cf329625eeeaca2762e8ce2bd75a3d1689ad0e7a7714f63d9efb9525f41cf42a18d66e15cdde4a798fb8b97ac55fe028c86b2f307959da8f794855
7
+ data.tar.gz: 9f069548587f6bb5a8beae83a654afae3ad97f91616be7fda724e5379d42ebde8e38a4574c743e2ef1f224e32cbffc9414a916ec9b1c1affa9757f65532f2b2f
data/ChangeLog CHANGED
@@ -1,3 +1,38 @@
1
+ 2017-05-15 version 0.5.4:
2
+
3
+ * Support "Content-Type: application/x-msgpack" for more efficient parsing of
4
+ HTTP response body.
5
+ * Added "enable_x_msgpack: true" option to send Accept header with
6
+ application/x-msgpack.
7
+
8
+
9
+ 2017-04-26 version 0.5.3:
10
+
11
+ * Added support for model version 0.173.
12
+ * Changed the default latest model version to 0.173.
13
+ * Fixed compatibility with the new major version of Farady
14
+ * Require Faraday 0.12 or later
15
+
16
+
17
+ 2017-02-01 version 0.5.2:
18
+
19
+ * Relax dependent version of Faraday to be able to use all 0.x versions.
20
+ * Fix build script that was broken due to new major version of rake.
21
+
22
+
23
+ 2016-11-01 version 0.5.1:
24
+
25
+ * Assume ConnectorId as a primitive type to be able to decode "connectorId"
26
+ fields.
27
+
28
+
29
+ 2016-10-28 version 0.5.0:
30
+
31
+ * Support multiple model versions
32
+ * Added support for model version 0.153.
33
+ * Changed the default latest model version to 0.513.
34
+
35
+
1
36
  2016-08-09 version 0.4.17:
2
37
 
3
38
  * Added support for :ssl option.
data/README.md CHANGED
@@ -92,3 +92,13 @@ $ bundle exec rake modelgen:latest
92
92
 
93
93
  See [RDoc](http://www.rubydoc.info/gems/presto-client/) for the full documentation.
94
94
 
95
+ ## Development
96
+
97
+ ### Releasing a new version
98
+
99
+ 1. Update lib/presto/client/version.rb
100
+ 2. Update ChangeLog
101
+ 3. git commit -am "vX.Y.Z"
102
+ 4. git tag "vX.Y.Z"
103
+ 5. git push --tags
104
+
@@ -30,7 +30,6 @@ module Presto::Client
30
30
  end
31
31
 
32
32
  def self.faraday_client(options)
33
-
34
33
  server = options[:server]
35
34
  unless server
36
35
  raise ArgumentError, ":server option is required"
@@ -16,6 +16,7 @@
16
16
  module Presto::Client
17
17
 
18
18
  require 'multi_json'
19
+ require 'msgpack'
19
20
  require 'presto/client/models'
20
21
  require 'presto/client/errors'
21
22
 
@@ -57,8 +58,8 @@ module Presto::Client
57
58
  @faraday.headers.merge!(optional_headers)
58
59
 
59
60
  if next_uri
60
- body = faraday_get_with_retry(next_uri)
61
- @results = @models::QueryResults.decode(MultiJson.load(body))
61
+ response = faraday_get_with_retry(next_uri)
62
+ @results = @models::QueryResults.decode(parse_body(response))
62
63
  else
63
64
  post_query_request!
64
65
  end
@@ -87,6 +88,13 @@ module Presto::Client
87
88
  if v = @options[:properties]
88
89
  headers[PrestoHeaders::PRESTO_SESSION] = encode_properties(v)
89
90
  end
91
+ if @options[:enable_x_msgpack]
92
+ # option name is enable_"x"_msgpack because "Accept: application/x-msgpack" header is
93
+ # not officially supported by Presto. We can use this option only if a proxy server
94
+ # decodes & encodes response body. Once this option is supported by Presto, option
95
+ # name should be enable_msgpack, which might be slightly different behavior.
96
+ headers['Accept'] = 'application/x-msgpack,application/json'
97
+ end
90
98
  headers
91
99
  end
92
100
 
@@ -110,11 +118,10 @@ module Presto::Client
110
118
 
111
119
  # TODO error handling
112
120
  if response.status != 200
113
- raise PrestoHttpError.new(response.status, "Failed to start query: #{response.body}")
121
+ raise PrestoHttpError.new(response.status, "Failed to start query: #{response.body} (#{response.status})")
114
122
  end
115
123
 
116
- body = response.body
117
- @results = load_json(uri, body, @models::QueryResults)
124
+ @results = decode_model(uri, parse_body(response), @models::QueryResults)
118
125
  end
119
126
 
120
127
  private :post_query_request!
@@ -157,20 +164,19 @@ module Presto::Client
157
164
  end
158
165
  uri = @results.next_uri
159
166
 
160
- body = faraday_get_with_retry(uri)
161
- @results = load_json(uri, body, @models::QueryResults)
167
+ response = faraday_get_with_retry(uri)
168
+ @results = decode_model(uri, parse_body(response), @models::QueryResults)
162
169
 
163
170
  return true
164
171
  end
165
172
 
166
173
  def query_info
167
174
  uri = "/v1/query/#{@results.id}"
168
- body = faraday_get_with_retry(uri)
169
- load_json(uri, body, @models::QueryInfo)
175
+ response = faraday_get_with_retry(uri)
176
+ decode_model(uri, parse_body(response), @models::QueryInfo)
170
177
  end
171
178
 
172
- def load_json(uri, body, body_class)
173
- hash = MultiJson.load(body)
179
+ def decode_model(uri, hash, body_class)
174
180
  begin
175
181
  body_class.decode(hash)
176
182
  rescue => e
@@ -182,7 +188,18 @@ module Presto::Client
182
188
  end
183
189
  end
184
190
 
185
- private :load_json
191
+ private :decode_model
192
+
193
+ def parse_body(response)
194
+ case response.headers['Content-Type']
195
+ when 'application/x-msgpack'
196
+ MessagePack.load(response.body)
197
+ else
198
+ MultiJson.load(response.body)
199
+ end
200
+ end
201
+
202
+ private :parse_body
186
203
 
187
204
  def faraday_get_with_retry(uri, &block)
188
205
  start = Time.now
@@ -201,7 +218,7 @@ module Presto::Client
201
218
 
202
219
  if response
203
220
  if response.status == 200 && !response.body.to_s.empty?
204
- return response.body
221
+ return response
205
222
  end
206
223
 
207
224
  if response.status != 503 # retry only if 503 Service Unavailable
@@ -15,6 +15,6 @@
15
15
  #
16
16
  module Presto
17
17
  module Client
18
- VERSION = "0.5.3"
18
+ VERSION = "0.5.4"
19
19
  end
20
20
  end
@@ -21,6 +21,7 @@ Gem::Specification.new do |gem|
21
21
 
22
22
  gem.add_dependency "faraday", ["~> 0.12"]
23
23
  gem.add_dependency "multi_json", ["~> 1.0"]
24
+ gem.add_dependency "msgpack", [">= 0.7.0"]
24
25
 
25
26
  gem.add_development_dependency "rake", [">= 0.9.2", "< 11.0"]
26
27
  gem.add_development_dependency "rspec", ["~> 2.13.0"]
@@ -82,6 +82,40 @@ describe Presto::Client::StatementClient do
82
82
  retry_p.should be_true
83
83
  end
84
84
 
85
+ it "uses 'Accept: application/x-msgpack' if option is set" do
86
+ retry_p = false
87
+ stub_request(:post, "localhost/v1/statement").
88
+ with(body: query,
89
+ headers: {
90
+ "User-Agent" => "presto-ruby/#{VERSION}",
91
+ "X-Presto-Catalog" => options[:catalog],
92
+ "X-Presto-Schema" => options[:schema],
93
+ "X-Presto-User" => options[:user],
94
+ "X-Presto-Language" => options[:language],
95
+ "X-Presto-Time-Zone" => options[:time_zone],
96
+ "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: "),
97
+ "Accept" => "application/x-msgpack,application/json"
98
+ }).to_return(body: MessagePack.dump(response_json2), headers: {"Content-Type" => "application/x-msgpack"})
99
+
100
+ stub_request(:get, "localhost/v1/next_uri").
101
+ with(headers: {
102
+ "User-Agent" => "presto-ruby/#{VERSION}",
103
+ "X-Presto-Catalog" => options[:catalog],
104
+ "X-Presto-Schema" => options[:schema],
105
+ "X-Presto-User" => options[:user],
106
+ "X-Presto-Language" => options[:language],
107
+ "X-Presto-Time-Zone" => options[:time_zone],
108
+ "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: "),
109
+ "Accept" => "application/x-msgpack,application/json"
110
+ }).to_return(body: lambda{|req|if retry_p; MessagePack.dump(response_json); else; retry_p=true; raise Timeout::Error.new("execution expired"); end }, headers: {"Content-Type" => "application/x-msgpack"})
111
+
112
+ faraday = Faraday.new(url: "http://localhost")
113
+ sc = StatementClient.new(faraday, query, options.merge(http_open_timeout: 1, enable_x_msgpack: "application/x-msgpack"))
114
+ sc.has_next?.should be_true
115
+ sc.advance.should be_true
116
+ retry_p.should be_true
117
+ end
118
+
85
119
  it "decodes DeleteHandle" do
86
120
  dh = Models::DeleteHandle.decode({
87
121
  "handle" => {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: presto-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-26 00:00:00.000000000 Z
11
+ date: 2017-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: msgpack
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.7.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.7.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -167,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
181
  version: '0'
168
182
  requirements: []
169
183
  rubyforge_project:
170
- rubygems_version: 2.5.2
184
+ rubygems_version: 2.6.8
171
185
  signing_key:
172
186
  specification_version: 4
173
187
  summary: Presto client library