thrift_client 0.8.3 → 0.8.4
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.
- data/lib/thrift_client/abstract_thrift_client.rb +19 -5
- data/test/thrift_client_test.rb +5 -0
- metadata +22 -8
@@ -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
|
-
|
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
|
-
|
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 =
|
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
|
data/test/thrift_client_test.rb
CHANGED
@@ -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,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thrift_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 55
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 0.8.
|
9
|
+
- 4
|
10
|
+
version: 0.8.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Evan Weaver
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date:
|
20
|
+
date: 2013-02-26 00:00:00 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: thrift
|
@@ -36,14 +36,28 @@ dependencies:
|
|
36
36
|
type: :runtime
|
37
37
|
version_requirements: *id001
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
39
|
+
name: rake
|
40
40
|
prerelease: false
|
41
41
|
requirement: &id002 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
hash: 3
|
47
|
+
segments:
|
48
|
+
- 0
|
49
|
+
version: "0"
|
50
|
+
type: :development
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: mongrel
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
56
|
none: false
|
43
57
|
requirements:
|
44
58
|
- - "="
|
45
59
|
- !ruby/object:Gem::Version
|
46
|
-
hash:
|
60
|
+
hash: 2328195415
|
47
61
|
segments:
|
48
62
|
- 1
|
49
63
|
- 2
|
@@ -52,7 +66,7 @@ dependencies:
|
|
52
66
|
- 2
|
53
67
|
version: 1.2.0.pre2
|
54
68
|
type: :development
|
55
|
-
version_requirements: *
|
69
|
+
version_requirements: *id003
|
56
70
|
description:
|
57
71
|
email:
|
58
72
|
executables: []
|
@@ -109,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
123
|
requirements: []
|
110
124
|
|
111
125
|
rubyforge_project:
|
112
|
-
rubygems_version: 1.8.
|
126
|
+
rubygems_version: 1.8.15
|
113
127
|
signing_key:
|
114
128
|
specification_version: 3
|
115
129
|
summary: A Thrift client wrapper that encapsulates some common failover behavior.
|