thrift_client 0.9.0 → 0.9.1

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.
@@ -92,14 +92,20 @@ class AbstractThriftClient
92
92
  # Force the client to connect to the server. Not necessary to be
93
93
  # called as the connection will be made on the first RPC method
94
94
  # call.
95
- def connect!
95
+ def connect!(method = nil)
96
+ start_time ||= Time.now
96
97
  @current_server = next_live_server
97
98
  @client = @current_server.client
98
99
  @last_client = @client
99
100
  do_callbacks(:post_connect, self)
100
101
  rescue IOError, Thrift::TransportException
101
102
  disconnect!(true)
102
- retry
103
+ timeout = timeout(method)
104
+ if timeout && Time.now - start_time > timeout
105
+ no_servers_available!
106
+ else
107
+ retry
108
+ end
103
109
  end
104
110
 
105
111
  def disconnect!(error = false)
@@ -132,7 +138,7 @@ class AbstractThriftClient
132
138
  return @server_list[cur]
133
139
  end
134
140
  end
135
- raise ThriftClient::NoServersAvailable, "No live servers in #{@server_list.inspect}."
141
+ no_servers_available!
136
142
  end
137
143
 
138
144
  def ensure_socket_alignment
@@ -150,9 +156,9 @@ class AbstractThriftClient
150
156
 
151
157
  def handled_proxy(method_name, *args)
152
158
  begin
153
- connect! unless @client
159
+ connect!(method_name.to_sym) unless @client
154
160
  if has_timeouts?
155
- @client.timeout = @options[:timeout_overrides][method_name.to_sym] || @options[:timeout]
161
+ @client.timeout = timeout(method_name.to_sym)
156
162
  end
157
163
  @request_count += 1
158
164
  do_callbacks(:before_method, method_name)
@@ -196,6 +202,10 @@ class AbstractThriftClient
196
202
  @has_timeouts ||= @options[:timeout_overrides].any? && transport_can_timeout?
197
203
  end
198
204
 
205
+ def timeout(method = nil)
206
+ @options[:timeout_overrides][method] || @options[:timeout]
207
+ end
208
+
199
209
  def transport_can_timeout?
200
210
  if (@options[:transport_wrapper] || @options[:transport]).method_defined?(:timeout=)
201
211
  true
@@ -204,4 +214,8 @@ class AbstractThriftClient
204
214
  false
205
215
  end
206
216
  end
217
+
218
+ def no_servers_available!
219
+ raise ThriftClient::NoServersAvailable, "No live servers in #{@server_list.inspect}."
220
+ end
207
221
  end
@@ -230,6 +230,11 @@ class ThriftClientTest < Test::Unit::TestCase
230
230
  assert_raises(ThriftClient::NoServersAvailable) { client.greeting("someone") }
231
231
  end
232
232
 
233
+ def test_connect_retry_period
234
+ client = ThriftClient.new(Greeter::Client, @servers[0], @options.merge(:server_retry_period => 0))
235
+ assert_raises(ThriftClient::NoServersAvailable) { client.connect! }
236
+ end
237
+
233
238
  def test_client_with_retry_period_drops_servers
234
239
  client = ThriftClient.new(Greeter::Client, @servers[0,2], @options.merge(:server_retry_period => 1, :retries => 2))
235
240
  assert_raises(ThriftClient::NoServersAvailable) { client.greeting("someone") }
metadata CHANGED
@@ -1,72 +1,81 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: thrift_client
3
- version: !ruby/object:Gem::Version
4
- version: 0.9.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 57
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 9
9
+ - 1
10
+ version: 0.9.1
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Evan Weaver
9
14
  - Ryan King
10
15
  - Jeff Hodges
11
16
  autorequire:
12
17
  bindir: bin
13
18
  cert_chain: []
14
- date: 2013-01-11 00:00:00.000000000 Z
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
19
+
20
+ date: 2013-02-26 00:00:00 Z
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
17
23
  name: thrift
18
- requirement: !ruby/object:Gem::Requirement
19
- none: false
20
- requirements:
21
- - - ~>
22
- - !ruby/object:Gem::Version
23
- version: 0.9.0
24
- type: :runtime
25
24
  prerelease: false
26
- version_requirements: !ruby/object:Gem::Requirement
25
+ requirement: &id001 !ruby/object:Gem::Requirement
27
26
  none: false
28
- requirements:
27
+ requirements:
29
28
  - - ~>
30
- - !ruby/object:Gem::Version
29
+ - !ruby/object:Gem::Version
30
+ hash: 59
31
+ segments:
32
+ - 0
33
+ - 9
34
+ - 0
31
35
  version: 0.9.0
32
- - !ruby/object:Gem::Dependency
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
33
39
  name: rake
34
- requirement: !ruby/object:Gem::Requirement
35
- none: false
36
- requirements:
37
- - - ! '>='
38
- - !ruby/object:Gem::Version
39
- version: '0'
40
- type: :development
41
40
  prerelease: false
42
- version_requirements: !ruby/object:Gem::Requirement
43
- none: false
44
- requirements:
45
- - - ! '>='
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- - !ruby/object:Gem::Dependency
49
- name: mongrel
50
- requirement: !ruby/object:Gem::Requirement
41
+ requirement: &id002 !ruby/object:Gem::Requirement
51
42
  none: false
52
- requirements:
53
- - - '='
54
- - !ruby/object:Gem::Version
55
- version: 1.2.0.pre2
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ hash: 3
47
+ segments:
48
+ - 0
49
+ version: "0"
56
50
  type: :development
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: mongrel
57
54
  prerelease: false
58
- version_requirements: !ruby/object:Gem::Requirement
55
+ requirement: &id003 !ruby/object:Gem::Requirement
59
56
  none: false
60
- requirements:
61
- - - '='
62
- - !ruby/object:Gem::Version
57
+ requirements:
58
+ - - "="
59
+ - !ruby/object:Gem::Version
60
+ hash: 2029539953
61
+ segments:
62
+ - 1
63
+ - 2
64
+ - 0
65
+ - pre
66
+ - 2
63
67
  version: 1.2.0.pre2
68
+ type: :development
69
+ version_requirements: *id003
64
70
  description:
65
71
  email:
66
72
  executables: []
73
+
67
74
  extensions: []
75
+
68
76
  extra_rdoc_files: []
69
- files:
77
+
78
+ files:
70
79
  - lib/thrift_client/abstract_thrift_client.rb
71
80
  - lib/thrift_client/connection/base.rb
72
81
  - lib/thrift_client/connection/factory.rb
@@ -87,29 +96,38 @@ files:
87
96
  - test/thrift_client_test.rb
88
97
  homepage: https://github.com/twitter/thrift_client
89
98
  licenses: []
99
+
90
100
  post_install_message:
91
101
  rdoc_options: []
92
- require_paths:
102
+
103
+ require_paths:
93
104
  - lib
94
- required_ruby_version: !ruby/object:Gem::Requirement
105
+ required_ruby_version: !ruby/object:Gem::Requirement
95
106
  none: false
96
- requirements:
97
- - - ! '>='
98
- - !ruby/object:Gem::Version
99
- version: '0'
100
- required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ hash: 3
111
+ segments:
112
+ - 0
113
+ version: "0"
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
115
  none: false
102
- requirements:
103
- - - ! '>='
104
- - !ruby/object:Gem::Version
105
- version: '0'
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ hash: 3
120
+ segments:
121
+ - 0
122
+ version: "0"
106
123
  requirements: []
124
+
107
125
  rubyforge_project:
108
- rubygems_version: 1.8.23
126
+ rubygems_version: 1.8.15
109
127
  signing_key:
110
128
  specification_version: 3
111
129
  summary: A Thrift client wrapper that encapsulates some common failover behavior.
112
- test_files:
130
+ test_files:
113
131
  - test/greeter/greeter.rb
114
132
  - test/greeter/server.rb
115
133
  - test/multiple_working_servers_test.rb