thrift_client 0.2.1 → 0.2.2

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/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+
2
+ v0.2.2. Fix connect bug.
3
+
1
4
  v0.2.1. Don't turn off strict_read by default; allow override.
2
5
 
3
6
  v0.2. Add ThriftClient::Simple (Robey).
@@ -4,17 +4,17 @@ module Thrift
4
4
  def timeout=(timeout)
5
5
  @transport.timeout = timeout
6
6
  end
7
-
7
+
8
8
  def timeout
9
9
  @transport.timeout
10
10
  end
11
11
  end
12
-
12
+
13
13
  module Client
14
14
  def timeout=(timeout)
15
15
  @iprot.trans.timeout = timeout
16
16
  end
17
-
17
+
18
18
  def timeout
19
19
  @iprot.trans.timeout
20
20
  end
data/lib/thrift_client.rb CHANGED
@@ -1,6 +1,14 @@
1
1
 
2
+ if ENV["ANCIENT_THRIFT"]
3
+ $LOAD_PATH.unshift("/Users/eweaver/p/twitter/rails/vendor/gems/thrift-751142/lib")
4
+ $LOAD_PATH.unshift("/Users/eweaver/p/twitter/rails/vendor/gems/thrift-751142/ext")
5
+ require 'thrift'
6
+ else
7
+ require 'rubygems'
8
+ require 'thrift'
9
+ end
10
+
2
11
  require 'rubygems'
3
- require 'thrift'
4
12
  require 'thrift_client/thrift'
5
13
 
6
14
  class ThriftClient
@@ -21,7 +29,7 @@ class ThriftClient
21
29
  NoServersAvailable],
22
30
  :raise => true,
23
31
  :retries => nil,
24
- :server_retry_period => nil,
32
+ :server_retry_period => 1,
25
33
  :timeouts => Hash.new(1),
26
34
  :defaults => {}
27
35
  }.freeze
@@ -39,7 +47,7 @@ Valid optional parameters are:
39
47
  <tt>:randomize_server_list</tt>:: Whether to connect to the servers randomly, instead of in order. Defaults to <tt>true</tt>.
40
48
  <tt>:raise</tt>:: Whether to reraise errors if no responsive servers are found. Defaults to <tt>true</tt>.
41
49
  <tt>:retries</tt>:: How many times to retry a request. Defaults to the number of servers defined.
42
- <tt>:server_retry_period</tt>:: How long to wait before trying to reconnect after marking all servers as down. Defaults to <tt>nil</tt> (do not wait).
50
+ <tt>:server_retry_period</tt>:: How many seconds to wait before trying to reconnect after marking all servers as down. Defaults to <tt>1</tt>. Set to <tt>nil</tt> to retry endlessly.
43
51
  <tt>:timeouts</tt>:: Specify timeouts on a per-method basis. Defaults to 1 second for everything. (Per-method values only work with <tt>Thrift::BufferedTransport</tt>.)
44
52
  <tt>:defaults</tt>:: Specify defaults to return on a per-method basis, if <tt>:raise</tt> is set to false.
45
53
 
@@ -54,7 +62,7 @@ Valid optional parameters are:
54
62
 
55
63
  @set_timeout = @options[:transport].instance_methods.include?("timeout=")
56
64
  @live_server_list = @server_list.dup
57
- @last_retry = Time.now
65
+ @last_retry = Time.now
58
66
 
59
67
  @client_class.instance_methods.each do |method_name|
60
68
  if method_name =~ /^recv_(.*)$/
@@ -72,6 +80,8 @@ Valid optional parameters are:
72
80
  Thrift::Socket.new(server.first, server.last.to_i, @options[:timeouts].default))
73
81
  @transport.open
74
82
  @client = @client_class.new(@options[:protocol].new(@transport, *@options[:protocol_extra_params]))
83
+ rescue Thrift::TransportException
84
+ retry
75
85
  end
76
86
 
77
87
  # Force the client to disconnect from the server.
@@ -86,21 +96,22 @@ Valid optional parameters are:
86
96
  connect! unless @client
87
97
  set_timeout!(method_name) if @set_timeout
88
98
  @client.send(method_name, *args)
99
+ rescue NoServersAvailable => e
100
+ handle_exception(e, method_name, args)
89
101
  rescue *@options[:exception_classes] => e
90
- tries ||= @retries
91
- tries -= 1
92
- if tries.zero? or e.is_a?(NoServersAvailable)
102
+ tries ||= @retries
103
+ if (tries -= 1) == 0
93
104
  handle_exception(e, method_name, args)
94
105
  else
95
106
  disconnect!
96
107
  retry
97
108
  end
98
109
  end
99
-
110
+
100
111
  def set_timeout!(method_name)
101
112
  @client.timeout = @options[:timeouts][:method_name.to_sym]
102
113
  end
103
-
114
+
104
115
  def handle_exception(e, method_name, args)
105
116
  raise e if @options[:raise]
106
117
  @options[:defaults][method_name.to_sym]
@@ -115,5 +126,5 @@ Valid optional parameters are:
115
126
  @live_server_list = @server_list.dup
116
127
  end
117
128
  @live_server_list.pop
118
- end
129
+ end
119
130
  end
data/test/test_helper.rb CHANGED
@@ -1,5 +1,6 @@
1
1
 
2
2
  require 'test/unit'
3
+ require 'benchmark'
3
4
  $LOAD_PATH << "#{File.expand_path(File.dirname(__FILE__))}/../lib"
4
5
  require 'thrift_client'
5
6
  require 'thrift_client/simple'
@@ -4,6 +4,8 @@ class ThriftClientTest < Test::Unit::TestCase
4
4
  def setup
5
5
  @entry = [ScribeThrift::LogEntry.new(:message => "something", :category => "thrift_client")]
6
6
  @servers = ["127.0.0.1:1461", "127.0.0.1:1462", "127.0.0.1:1463"]
7
+ @socket = 1461
8
+ @timeout = 0.2
7
9
  @options = {:protocol_extra_params => [false]}
8
10
  end
9
11
 
@@ -15,7 +17,7 @@ class ThriftClientTest < Test::Unit::TestCase
15
17
 
16
18
  def test_non_random_fall_through
17
19
  assert_nothing_raised do
18
- ThriftClient.new(ScribeThrift::Client, @servers, @options).Log(@entry)
20
+ ThriftClient.new(ScribeThrift::Client, @servers, @options.merge(:randomize_server_list => false)).Log(@entry)
19
21
  end
20
22
  end
21
23
 
@@ -54,16 +56,51 @@ class ThriftClientTest < Test::Unit::TestCase
54
56
  end
55
57
 
56
58
  def test_no_servers_eventually_raise
57
- assert_raises(Thrift::TransportException) do
58
- ThriftClient.new(ScribeThrift::Client, @servers[0,2], @options).Log(@entry)
59
+ client = ThriftClient.new(ScribeThrift::Client, @servers[0,2], @options)
60
+ assert_raises(ThriftClient::NoServersAvailable) do
61
+ client.Log(@entry)
62
+ client.disconnect!
59
63
  end
60
64
  end
65
+
66
+ def test_framed_transport_timeout
67
+ socket = stub_server(@socket)
68
+ measurement = Benchmark.measure do
69
+ assert_raises(Thrift::TransportException) do
70
+ ThriftClient.new(ScribeThrift::Client, "127.0.0.1:#{@socket}",
71
+ @options.merge(:timeouts => Hash.new(@timeout))
72
+ ).Log(@entry)
73
+ end
74
+ end
75
+ assert((measurement.real < @timeout + 0.01), "#{measurement.real} > #{@timeout}")
76
+ socket.close
77
+ end
78
+
79
+ def test_buffered_transport_timeout
80
+ socket = stub_server(@socket)
81
+ measurement = Benchmark.measure do
82
+ assert_raises(Thrift::TransportException) do
83
+ ThriftClient.new(ScribeThrift::Client, "127.0.0.1:#{@socket}",
84
+ @options.merge(:timeouts => Hash.new(@timeout), :transport => Thrift::BufferedTransport)
85
+ ).Log(@entry)
86
+ end
87
+ end
88
+ assert((measurement.real < @timeout + 0.01), "#{measurement.real} > #{@timeout}")
89
+ socket.close
90
+ end
61
91
 
62
92
  def test_retry_period
63
93
  client = ThriftClient.new(ScribeThrift::Client, @servers[0,2], @options.merge(:server_retry_period => 1))
64
- assert_raises(Thrift::TransportException) { client.Log(@entry) }
65
94
  assert_raises(ThriftClient::NoServersAvailable) { client.Log(@entry) }
66
- sleep 1
67
- assert_raises(Thrift::TransportException) { client.Log(@entry) }
95
+ sleep 1.1
96
+ assert_raises(ThriftClient::NoServersAvailable) { client.Log(@entry) }
68
97
  end
98
+
99
+ private
100
+
101
+ def stub_server(port)
102
+ socket = TCPServer.new('127.0.0.1', port)
103
+ Thread.new { socket.accept }
104
+ socket
105
+ end
69
106
  end
@@ -2,12 +2,12 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{thrift_client}
5
- s.version = "0.2.1"
5
+ s.version = "0.2.2"
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"]
9
9
  s.cert_chain = ["/Users/eweaver/p/configuration/gem_certificates/evan_weaver-original-public_cert.pem"]
10
- s.date = %q{2009-10-28}
10
+ s.date = %q{2009-11-18}
11
11
  s.description = %q{A Thrift client wrapper that encapsulates some common failover behavior.}
12
12
  s.email = %q{}
13
13
  s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "lib/thrift_client.rb", "lib/thrift_client/thrift.rb"]
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Thrift_client", "--main", "README"]
17
17
  s.require_paths = ["lib"]
18
18
  s.rubyforge_project = %q{fauna}
19
- s.rubygems_version = %q{1.3.4}
19
+ s.rubygems_version = %q{1.3.5}
20
20
  s.signing_key = %q{/Users/eweaver/p/configuration/gem_certificates/evan_weaver-original-private_key.pem}
21
21
  s.summary = %q{A Thrift client wrapper that encapsulates some common failover behavior.}
22
22
  s.test_files = ["test/simple_test.rb", "test/test_helper.rb", "test/thrift_client_test.rb"]
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thrift_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Weaver
@@ -30,7 +30,7 @@ cert_chain:
30
30
  yZ0=
31
31
  -----END CERTIFICATE-----
32
32
 
33
- date: 2009-10-28 00:00:00 -07:00
33
+ date: 2009-11-18 00:00:00 -08:00
34
34
  default_executable:
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
@@ -95,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  requirements: []
96
96
 
97
97
  rubyforge_project: fauna
98
- rubygems_version: 1.3.4
98
+ rubygems_version: 1.3.5
99
99
  signing_key:
100
100
  specification_version: 3
101
101
  summary: A Thrift client wrapper that encapsulates some common failover behavior.
metadata.gz.sig CHANGED
@@ -1,3 +1,4 @@
1
- Q1He�����H�)����82'X+0'�?�1(O/�0�˪v������9G0u%����
2
- �����d�U��bǷ��=��
3
- ^đ��
1
+ �4E��X����h.BZ����J�q-�'����O6�O�X�̞�Mk)/6�–��eg���+�v�
2
+ ?&/��)��
3
+ �ԪG�������=�h��FO��sD���8���ۮ�I� �S/w�
4
+ w�/;Z��H��Tt��PS�J�����F!R\�rhJ�V��~���f�z�2S��.�a�T��1��^�˩~�T�ؿ