thrift_client 0.4.7 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/lib/thrift_client/abstract_thrift_client.rb +103 -149
- data/lib/thrift_client/event_machine.rb +0 -2
- data/lib/thrift_client.rb +6 -16
- data/test/thrift_client_http_test.rb +0 -8
- data/test/thrift_client_test.rb +18 -37
- data/thrift_client.gemspec +1 -1
- metadata +4 -4
data/CHANGELOG
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
v0.5.0 Add support for wrapping exception, so that Thrift::Foo can become Greeter::Foo.
|
2
|
+
Make server_retry_period work the way you expect.
|
3
|
+
Better bookkeeping around marking servers as dead.
|
4
|
+
|
1
5
|
v0.4.7 fix thrift gem dependency
|
2
6
|
|
3
7
|
v0.4.6 Add support for oneway methods.
|
@@ -1,20 +1,54 @@
|
|
1
1
|
class AbstractThriftClient
|
2
2
|
|
3
|
+
class Server
|
4
|
+
attr_reader :connection_string, :marked_down_at
|
5
|
+
|
6
|
+
def initialize(connection_string)
|
7
|
+
@connection_string = connection_string
|
8
|
+
end
|
9
|
+
alias to_s connection_string
|
10
|
+
|
11
|
+
def mark_down!
|
12
|
+
@marked_down_at = Time.now
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
DISCONNECT_ERRORS = [
|
17
|
+
IOError,
|
18
|
+
Thrift::Exception,
|
19
|
+
Thrift::ApplicationException,
|
20
|
+
Thrift::TransportException
|
21
|
+
]
|
22
|
+
|
23
|
+
DEFAULT_WRAPPED_ERRORS = [
|
24
|
+
Thrift::ApplicationException,
|
25
|
+
Thrift::TransportException,
|
26
|
+
]
|
27
|
+
|
3
28
|
DEFAULTS = {
|
4
29
|
:protocol => Thrift::BinaryProtocol,
|
5
30
|
:protocol_extra_params => [],
|
6
31
|
:transport => Thrift::Socket,
|
7
32
|
:transport_wrapper => Thrift::FramedTransport,
|
8
33
|
:raise => true,
|
9
|
-
:defaults => {}
|
10
|
-
|
34
|
+
:defaults => {},
|
35
|
+
:exception_classes => DISCONNECT_ERRORS,
|
36
|
+
:retries => 0,
|
37
|
+
:server_retry_period => 1,
|
38
|
+
:server_max_requests => nil,
|
39
|
+
:retry_overrides => {},
|
40
|
+
:wrapped_exception_classes => DEFAULT_WRAPPED_ERRORS,
|
41
|
+
:timeout => 1,
|
42
|
+
:timeout_overrides => {}
|
43
|
+
}
|
11
44
|
|
12
45
|
attr_reader :client, :client_class, :current_server, :server_list, :options, :client_methods
|
13
46
|
|
14
47
|
def initialize(client_class, servers, options = {})
|
15
48
|
@options = DEFAULTS.merge(options)
|
49
|
+
@options[:server_retry_period] ||= 0
|
16
50
|
@client_class = client_class
|
17
|
-
@server_list = Array(servers)
|
51
|
+
@server_list = Array(servers).collect{|s| Server.new(s)}.sort_by { rand }
|
18
52
|
@current_server = @server_list.first
|
19
53
|
|
20
54
|
@client_methods = []
|
@@ -24,6 +58,15 @@ class AbstractThriftClient
|
|
24
58
|
@client_methods << $1
|
25
59
|
end
|
26
60
|
end
|
61
|
+
@request_count = 0
|
62
|
+
@options[:wrapped_exception_classes].each do |exception_klass|
|
63
|
+
name = exception_klass.to_s.split('::').last
|
64
|
+
begin
|
65
|
+
@client_class.const_get(name)
|
66
|
+
rescue NameError
|
67
|
+
@client_class.const_set(name, Class.new(exception_klass))
|
68
|
+
end
|
69
|
+
end
|
27
70
|
end
|
28
71
|
|
29
72
|
def inspect
|
@@ -34,180 +77,91 @@ class AbstractThriftClient
|
|
34
77
|
# called as the connection will be made on the first RPC method
|
35
78
|
# call.
|
36
79
|
def connect!
|
37
|
-
@
|
80
|
+
@current_server = next_live_server
|
81
|
+
@connection = Connection::Factory.create(@options[:transport], @options[:transport_wrapper], @current_server.connection_string, @options[:timeout])
|
38
82
|
@connection.connect!
|
39
83
|
@client = @client_class.new(@options[:protocol].new(@connection.transport, *@options[:protocol_extra_params]))
|
40
|
-
rescue Thrift::TransportException, Errno::ECONNREFUSED => e
|
41
|
-
@transport.close rescue nil
|
42
|
-
raise e
|
43
84
|
end
|
44
85
|
|
45
86
|
def disconnect!
|
46
|
-
@connection.close rescue nil
|
87
|
+
@connection.close rescue nil #TODO
|
47
88
|
@client = nil
|
48
89
|
@current_server = nil
|
90
|
+
@request_count = 0
|
49
91
|
end
|
50
92
|
|
51
93
|
private
|
52
|
-
def handled_proxy(method_name, *args)
|
53
|
-
proxy(method_name, *args)
|
54
|
-
rescue Exception => e
|
55
|
-
handle_exception(e, method_name, args)
|
56
|
-
end
|
57
|
-
|
58
|
-
def post_connect(method_name); end
|
59
|
-
|
60
|
-
def proxy(method_name, *args)
|
61
|
-
connect! unless @client
|
62
|
-
post_connect(method_name)
|
63
|
-
send_rpc(method_name, *args)
|
64
|
-
end
|
65
|
-
|
66
|
-
def send_rpc(method_name, *args)
|
67
|
-
@client.send(method_name, *args)
|
68
|
-
end
|
69
|
-
|
70
|
-
def disconnect_on_error!
|
71
|
-
@connection.close rescue nil
|
72
|
-
@client = nil
|
73
|
-
@current_server = nil
|
74
|
-
end
|
75
|
-
|
76
|
-
def handle_exception(e, method_name, args=nil)
|
77
|
-
raise e if @options[:raise]
|
78
|
-
@options[:defaults][method_name.to_sym]
|
79
|
-
end
|
80
|
-
|
81
|
-
module RetryingThriftClient
|
82
|
-
DISCONNECT_ERRORS = [
|
83
|
-
IOError,
|
84
|
-
Thrift::Exception,
|
85
|
-
Thrift::ProtocolException,
|
86
|
-
Thrift::ApplicationException,
|
87
|
-
Thrift::TransportException
|
88
|
-
].freeze
|
89
|
-
|
90
|
-
RETRYING_DEFAULTS = {
|
91
|
-
:exception_classes => DISCONNECT_ERRORS,
|
92
|
-
:randomize_server_list => true,
|
93
|
-
:retries => 0,
|
94
|
-
:server_retry_period => 1,
|
95
|
-
:server_max_requests => nil,
|
96
|
-
:retry_overrides => {}
|
97
|
-
}.freeze
|
98
|
-
|
99
|
-
def initialize(client_class, servers, options = {})
|
100
|
-
super
|
101
|
-
@options = RETRYING_DEFAULTS.merge(@options) # @options is set by super
|
102
|
-
@retries = @options[:retries]
|
103
|
-
@request_count = 0
|
104
|
-
@max_requests = @options[:server_max_requests]
|
105
|
-
@retry_period = @options[:server_retry_period]
|
106
|
-
rebuild_live_server_list!
|
107
|
-
end
|
108
|
-
|
109
|
-
def connect!
|
110
|
-
@current_server = next_server
|
111
|
-
super
|
112
|
-
rescue Thrift::TransportException, Errno::ECONNREFUSED
|
113
|
-
retry
|
114
|
-
end
|
115
|
-
|
116
|
-
def disconnect!
|
117
|
-
# Keep live servers in the list if we have a retry period. Otherwise,
|
118
|
-
# always eject, because we will always re-add them.
|
119
|
-
if @retry_period && @current_server
|
120
|
-
@live_server_list.unshift(@current_server)
|
121
|
-
end
|
122
|
-
|
123
|
-
super()
|
124
|
-
@request_count = 0
|
125
|
-
end
|
126
|
-
|
127
|
-
private
|
128
94
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
95
|
+
def next_live_server
|
96
|
+
@server_index ||= 0
|
97
|
+
@server_list.length.times do |i|
|
98
|
+
cur = (1 + @server_index + i) % @server_list.length
|
99
|
+
if !@server_list[cur].marked_down_at || (@server_list[cur].marked_down_at + @options[:server_retry_period] <= Time.now)
|
100
|
+
@server_index = cur
|
101
|
+
return @server_list[cur]
|
135
102
|
end
|
136
|
-
@live_server_list.pop
|
137
103
|
end
|
104
|
+
raise ThriftClient::NoServersAvailable, "No live servers in #{@server_list.inspect} since #{@last_rebuild.inspect}."
|
105
|
+
end
|
138
106
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
@
|
107
|
+
def handled_proxy(method_name, *args)
|
108
|
+
disconnect_on_max! if @options[:server_max_requests] && @request_count >= @options[:server_max_requests]
|
109
|
+
begin
|
110
|
+
connect! unless @client
|
111
|
+
if has_timeouts?
|
112
|
+
@client.timeout = @options[:timeout_overrides][method_name.to_sym] || @options[:timeout]
|
145
113
|
end
|
146
|
-
|
147
|
-
|
148
|
-
def handled_proxy(method_name, *args)
|
149
|
-
disconnect_on_max! if @max_requests and @request_count >= @max_requests
|
150
|
-
super
|
151
|
-
end
|
152
|
-
|
153
|
-
def proxy(method_name, *args)
|
154
|
-
super
|
114
|
+
@request_count += 1
|
115
|
+
@client.send(method_name, *args)
|
155
116
|
rescue *@options[:exception_classes] => e
|
156
117
|
disconnect_on_error!
|
157
|
-
tries ||= (@options[:retry_overrides][method_name.to_sym] || @retries) + 1
|
118
|
+
tries ||= (@options[:retry_overrides][method_name.to_sym] || @options[:retries]) + 1
|
158
119
|
tries -= 1
|
159
|
-
tries > 0
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
def disconnect_on_max!
|
168
|
-
@live_server_list.push(@current_server)
|
169
|
-
disconnect_on_error!
|
120
|
+
if tries > 0
|
121
|
+
retry
|
122
|
+
else
|
123
|
+
raise_or_default(e, method_name)
|
124
|
+
end
|
125
|
+
rescue Exception => e
|
126
|
+
raise_or_default(e, method_name)
|
170
127
|
end
|
128
|
+
end
|
171
129
|
|
172
|
-
|
173
|
-
|
174
|
-
|
130
|
+
def raise_or_default(e, method_name)
|
131
|
+
if @options[:raise]
|
132
|
+
raise_wrapped_error(e)
|
133
|
+
else
|
134
|
+
@options[:defaults][method_name.to_sym]
|
175
135
|
end
|
176
|
-
|
177
136
|
end
|
178
137
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
def initialize(client_class, servers, options = {})
|
186
|
-
super
|
187
|
-
@options = TIMINGOUT_DEFAULTS.merge(@options)
|
138
|
+
def raise_wrapped_error(e)
|
139
|
+
if @options[:wrapped_exception_classes].include?(e.class)
|
140
|
+
raise @client_class.const_get(e.class.to_s.split('::').last), e.message, e.backtrace
|
141
|
+
else
|
142
|
+
raise e
|
188
143
|
end
|
144
|
+
end
|
189
145
|
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
@client.timeout = @options[:timeout_overrides][method_name.to_sym] || @options[:timeout]
|
194
|
-
end
|
146
|
+
def disconnect_on_max!
|
147
|
+
disconnect!
|
148
|
+
end
|
195
149
|
|
196
|
-
|
197
|
-
|
198
|
-
|
150
|
+
def disconnect_on_error!
|
151
|
+
@current_server.mark_down!
|
152
|
+
disconnect!
|
153
|
+
end
|
199
154
|
|
200
|
-
|
201
|
-
|
202
|
-
|
155
|
+
def has_timeouts?
|
156
|
+
@has_timeouts ||= @options[:timeout_overrides].any? && transport_can_timeout?
|
157
|
+
end
|
203
158
|
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
end
|
159
|
+
def transport_can_timeout?
|
160
|
+
if (@options[:transport_wrapper] || @options[:transport]).method_defined?(:timeout=)
|
161
|
+
true
|
162
|
+
else
|
163
|
+
warn "ThriftClient: Timeout overrides have no effect with with transport type #{(@options[:transport_wrapper] || @options[:transport])}"
|
164
|
+
false
|
211
165
|
end
|
212
166
|
end
|
213
167
|
end
|
@@ -27,8 +27,6 @@ module Thrift
|
|
27
27
|
end
|
28
28
|
Fiber.yield
|
29
29
|
|
30
|
-
# Use Thrift::TransportException so the RetryingThriftClient knows to try the next
|
31
|
-
# server instead of raising the error.
|
32
30
|
raise Thrift::TransportException, "Unable to connect to #{@host}:#{@port}" unless @connection.connected?
|
33
31
|
@connection
|
34
32
|
end
|
data/lib/thrift_client.rb
CHANGED
@@ -1,11 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
require 'thrift'
|
5
|
-
else
|
6
|
-
require 'rubygems'
|
7
|
-
require 'thrift'
|
8
|
-
end
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'thrift', '~>0.2.0'
|
3
|
+
require 'thrift'
|
9
4
|
|
10
5
|
require 'rubygems'
|
11
6
|
require 'thrift_client/thrift'
|
@@ -13,11 +8,7 @@ require 'thrift_client/connection'
|
|
13
8
|
require 'thrift_client/abstract_thrift_client'
|
14
9
|
|
15
10
|
class ThriftClient < AbstractThriftClient
|
16
|
-
# This error is for backwards compatibility only. If defined in
|
17
|
-
# RetryingThriftClient instead, causes the test suite will break.
|
18
11
|
class NoServersAvailable < StandardError; end
|
19
|
-
include RetryingThriftClient
|
20
|
-
include TimingOutThriftClient
|
21
12
|
|
22
13
|
=begin rdoc
|
23
14
|
Create a new ThriftClient instance. Accepts an internal Thrift client class (such as CassandraRb::Client), a list of servers with ports, and optional parameters.
|
@@ -28,11 +19,10 @@ Valid optional parameters are:
|
|
28
19
|
<tt>:protocol_extra_params</tt>:: An array of additional parameters to pass to the protocol initialization call. Defaults to <tt>[]</tt>.
|
29
20
|
<tt>:transport</tt>:: Which Thrift transport to use. Defaults to <tt>Thrift::Socket</tt>.
|
30
21
|
<tt>:transport_wrapper</tt>:: Which Thrift transport wrapper to use. Defaults to <tt>Thrift::FramedTransport</tt>.
|
31
|
-
<tt>:
|
32
|
-
<tt>:exception_classes</tt>:: Which exceptions to catch and retry when sending a request. Defaults to <tt>[IOError, Thrift::Exception, Thrift::ProtocolException, Thrift::ApplicationException, Thrift::TransportException, NoServersAvailable]</tt>
|
22
|
+
<tt>:exception_classes</tt>:: Which exceptions to catch and retry when sending a request. Defaults to <tt>[IOError, Thrift::Exception, Thrift::ApplicationException, Thrift::TransportException, NoServersAvailable]</tt>
|
33
23
|
<tt>:raise</tt>:: Whether to reraise errors if no responsive servers are found. Defaults to <tt>true</tt>.
|
34
|
-
<tt>:retries</tt>:: How many times to retry a request. Defaults to
|
35
|
-
<tt>:server_retry_period</tt>:: How many seconds to wait before trying to reconnect
|
24
|
+
<tt>:retries</tt>:: How many times to retry a request. Defaults to 0.
|
25
|
+
<tt>:server_retry_period</tt>:: How many seconds to wait before trying to reconnect to a dead server. Defaults to <tt>1</tt>. Set to <tt>nil</tt> to disable.
|
36
26
|
<tt>:server_max_requests</tt>:: How many requests to perform before moving on to the next server in the pool, regardless of error status. Defaults to <tt>nil</tt> (no limit).
|
37
27
|
<tt>:timeout</tt>:: Specify the default timeout in seconds. Defaults to <tt>1</tt>.
|
38
28
|
<tt>:timeout_overrides</tt>:: Specify additional timeouts on a per-method basis, in seconds. Only works with <tt>Thrift::BufferedTransport</tt>.
|
@@ -42,13 +42,5 @@ class ThriftClientHTTPTest < Test::Unit::TestCase
|
|
42
42
|
ThriftClient.new(Greeter::Client, "http://127.0.0.1:1463/greeter", @options).greeting("someone")
|
43
43
|
end
|
44
44
|
end
|
45
|
-
|
46
|
-
def test_non_random_fall_through
|
47
|
-
@servers = ["http://127.0.0.1:1463/greeter", "http://127.0.0.1:1461/greeter", "http://127.0.0.1:1462/greeter"]
|
48
|
-
assert_nothing_raised do
|
49
|
-
@options.merge!({ :protocol => Thrift::BinaryProtocol, :transport => Thrift::HTTPClientTransport })
|
50
|
-
ThriftClient.new(Greeter::Client, @servers, @options.merge(:randomize_server_list => false)).greeting("someone")
|
51
|
-
end
|
52
|
-
end
|
53
45
|
|
54
46
|
end
|
data/test/thrift_client_test.rb
CHANGED
@@ -32,33 +32,12 @@ class ThriftClientTest < Test::Unit::TestCase
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
def test_non_random_fall_through
|
36
|
-
assert_nothing_raised do
|
37
|
-
ThriftClient.new(Greeter::Client, @servers, @options.merge(:randomize_server_list => false)).greeting("someone")
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
35
|
def test_dont_raise
|
42
36
|
assert_nothing_raised do
|
43
37
|
ThriftClient.new(Greeter::Client, @servers.first, @options.merge(:raise => false)).greeting("someone")
|
44
38
|
end
|
45
39
|
end
|
46
40
|
|
47
|
-
def test_handle_exception_is_called_once_when_retrying
|
48
|
-
client = ThriftClient.new(Greeter::Client, @servers.first, @options.merge(:raise => false, :retries => 1))
|
49
|
-
client.options[:exception_classes] += [ThriftClient::NoServersAvailable]
|
50
|
-
singleton_class = (class << client; self end)
|
51
|
-
|
52
|
-
times_called = 0
|
53
|
-
singleton_class.send :define_method, :handle_exception do |*args|
|
54
|
-
times_called += 1
|
55
|
-
raise IOError
|
56
|
-
end
|
57
|
-
|
58
|
-
assert_raises(IOError) { client.greeting('someone') }
|
59
|
-
assert_equal 1, times_called
|
60
|
-
end
|
61
|
-
|
62
41
|
def test_retries_correct_number_of_times
|
63
42
|
stub_server(@port) do |socket|
|
64
43
|
opts = @options.merge(:timeout => @timeout, :retries => 4, :server_retry_period => nil)
|
@@ -73,7 +52,7 @@ class ThriftClientTest < Test::Unit::TestCase
|
|
73
52
|
times_called += 1; super
|
74
53
|
end
|
75
54
|
|
76
|
-
assert_raises(
|
55
|
+
assert_raises(Greeter::Client::TransportException) { client.greeting("someone") }
|
77
56
|
assert_equal opts[:retries] + 1, times_called
|
78
57
|
end
|
79
58
|
end
|
@@ -91,7 +70,7 @@ class ThriftClientTest < Test::Unit::TestCase
|
|
91
70
|
def test_random_fall_through
|
92
71
|
assert_nothing_raised do
|
93
72
|
10.times do
|
94
|
-
client = ThriftClient.new(Greeter::Client, @servers, @options)
|
73
|
+
client = ThriftClient.new(Greeter::Client, @servers, @options.merge(:retries => 2))
|
95
74
|
client.greeting("someone")
|
96
75
|
client.disconnect!
|
97
76
|
end
|
@@ -105,7 +84,7 @@ class ThriftClientTest < Test::Unit::TestCase
|
|
105
84
|
end
|
106
85
|
|
107
86
|
def test_no_servers_eventually_raise
|
108
|
-
client = ThriftClient.new(Greeter::Client, @servers[0,2], @options)
|
87
|
+
client = ThriftClient.new(Greeter::Client, @servers[0,2], @options.merge(:retries => 2))
|
109
88
|
assert_raises(ThriftClient::NoServersAvailable) do
|
110
89
|
client.greeting("someone")
|
111
90
|
client.disconnect!
|
@@ -115,7 +94,7 @@ class ThriftClientTest < Test::Unit::TestCase
|
|
115
94
|
def test_framed_transport_timeout
|
116
95
|
stub_server(@port) do |socket|
|
117
96
|
measurement = Benchmark.measure do
|
118
|
-
assert_raises(
|
97
|
+
assert_raises(Greeter::Client::TransportException) do
|
119
98
|
ThriftClient.new(Greeter::Client, "127.0.0.1:#{@port}",
|
120
99
|
@options.merge(:timeout => @timeout)
|
121
100
|
).greeting("someone")
|
@@ -128,10 +107,11 @@ class ThriftClientTest < Test::Unit::TestCase
|
|
128
107
|
def test_buffered_transport_timeout
|
129
108
|
stub_server(@port) do |socket|
|
130
109
|
measurement = Benchmark.measure do
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
110
|
+
client = ThriftClient.new(Greeter::Client, "127.0.0.1:#{@port}",
|
111
|
+
@options.merge(:timeout => @timeout, :transport_wrapper => Thrift::BufferedTransport)
|
112
|
+
)
|
113
|
+
assert_raises(Greeter::Client::TransportException) do
|
114
|
+
client.greeting("someone")
|
135
115
|
end
|
136
116
|
end
|
137
117
|
assert((measurement.real > @timeout), "#{measurement.real} < #{@timeout}")
|
@@ -143,10 +123,11 @@ class ThriftClientTest < Test::Unit::TestCase
|
|
143
123
|
log_timeout = @timeout * 4
|
144
124
|
stub_server(@port) do |socket|
|
145
125
|
measurement = Benchmark.measure do
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
126
|
+
client = ThriftClient.new(Greeter::Client, "127.0.0.1:#{@port}",
|
127
|
+
@options.merge(:timeout => @timeout, :timeout_overrides => {:greeting => log_timeout}, :transport_wrapper => Thrift::BufferedTransport)
|
128
|
+
)
|
129
|
+
assert_raises(Greeter::Client::TransportException) do
|
130
|
+
client.greeting("someone")
|
150
131
|
end
|
151
132
|
end
|
152
133
|
assert((measurement.real > log_timeout), "#{measurement.real} < #{log_timeout}")
|
@@ -154,28 +135,28 @@ class ThriftClientTest < Test::Unit::TestCase
|
|
154
135
|
end
|
155
136
|
|
156
137
|
def test_retry_period
|
157
|
-
client = ThriftClient.new(Greeter::Client, @servers[0,2], @options.merge(:server_retry_period => 1))
|
138
|
+
client = ThriftClient.new(Greeter::Client, @servers[0,2], @options.merge(:server_retry_period => 1, :retries => 2))
|
158
139
|
assert_raises(ThriftClient::NoServersAvailable) { client.greeting("someone") }
|
159
140
|
sleep 1.1
|
160
141
|
assert_raises(ThriftClient::NoServersAvailable) { client.greeting("someone") }
|
161
142
|
end
|
162
143
|
|
163
144
|
def test_client_with_retry_period_drops_servers
|
164
|
-
client = ThriftClient.new(Greeter::Client, @servers[0,2], @options.merge(:server_retry_period => 1))
|
145
|
+
client = ThriftClient.new(Greeter::Client, @servers[0,2], @options.merge(:server_retry_period => 1, :retries => 2))
|
165
146
|
assert_raises(ThriftClient::NoServersAvailable) { client.greeting("someone") }
|
166
147
|
sleep 1.1
|
167
148
|
assert_raises(ThriftClient::NoServersAvailable) { client.greeting("someone") }
|
168
149
|
end
|
169
150
|
|
170
151
|
def test_oneway_method
|
171
|
-
client = ThriftClient.new(Greeter::Client, @servers, @options.merge(:server_max_requests => 2))
|
152
|
+
client = ThriftClient.new(Greeter::Client, @servers, @options.merge(:server_max_requests => 2, :retries => 2))
|
172
153
|
assert_nothing_raised do
|
173
154
|
response = client.yo("dude")
|
174
155
|
end
|
175
156
|
end
|
176
157
|
|
177
158
|
def test_server_max_requests_with_downed_servers
|
178
|
-
client = ThriftClient.new(Greeter::Client, @servers, @options.merge(:server_max_requests => 2))
|
159
|
+
client = ThriftClient.new(Greeter::Client, @servers, @options.merge(:server_max_requests => 2, :retries => 2))
|
179
160
|
client.greeting("someone")
|
180
161
|
internal_client = client.client
|
181
162
|
client.greeting("someone")
|
data/thrift_client.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{thrift_client}
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.5.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0.8") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Evan Weaver, Ryan King, Jeff Hodges"]
|
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: 11
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 5
|
9
|
+
- 0
|
10
|
+
version: 0.5.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Evan Weaver, Ryan King, Jeff Hodges
|