thrift-client 0.1.0 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/thrift_client.rb +6 -5
- data/lib/thrift_client/abstract_thrift_client.rb +106 -69
- data/lib/thrift_client/pool.rb +34 -0
- data/lib/thrift_client/pool/fiber_connection_pool.rb +67 -0
- data/lib/thrift_client/pool/thread_connection_pool.rb +69 -0
- data/lib/thrift_client/{abstract_server.rb → server.rb} +62 -60
- data/lib/thrift_client/thrift/client.rb +15 -0
- data/lib/thrift_client/thrift/processor.rb +44 -0
- data/lib/thrift_client/{thrift.rb → thrift/protocol.rb} +1 -72
- data/lib/thrift_client/thrift/struct.rb +15 -0
- data/lib/thrift_client/thrift/transport.rb +208 -0
- data/test/em_test.rb +1 -0
- data/test/foobar/bar_service.rb +133 -0
- data/test/foobar/common_service.rb +388 -0
- data/test/foobar/foo_service.rb +133 -0
- data/test/{foobar_constants.rb → foobar/foobar_constants.rb} +3 -3
- data/test/{foobar_types.rb → foobar/foobar_types.rb} +12 -10
- data/test/foobar/handler.rb +74 -0
- data/test/helper.rb +50 -0
- data/test/passport.rb +51 -0
- data/test/start_server.rb +8 -0
- data/test/test.rb +27 -0
- data/test/test_client.rb +111 -0
- data/test/test_config.rb +54 -0
- data/test/test_connection_pool.rb +43 -0
- data/test/test_eventmachine_transprot.rb +146 -0
- data/test/test_multiplexed.rb +62 -0
- metadata +47 -24
- data/lib/thrift_client/multi_client_server.rb +0 -59
- data/lib/thrift_client/single_client_server.rb +0 -37
- data/test/client_test.rb +0 -172
- data/test/foobar_service.rb +0 -282
- data/test/multiplexed_protocol_test.rb +0 -60
- data/test/multiplexed_server.rb +0 -102
- data/test/server.rb +0 -97
data/test/test_config.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
$:.unshift File.expand_path("../../lib", __FILE__)
|
2
|
+
$:.unshift File.expand_path("../../test", __FILE__)
|
3
|
+
|
4
|
+
require "test/unit"
|
5
|
+
require "thrift_client"
|
6
|
+
require "foobar/common_service"
|
7
|
+
|
8
|
+
class ClientTest < Test::Unit::TestCase
|
9
|
+
include Test::Unit::Assertions
|
10
|
+
|
11
|
+
def setup
|
12
|
+
super
|
13
|
+
@config = {
|
14
|
+
"protocol" => "binary",
|
15
|
+
"transport" => "socket",
|
16
|
+
"framed" => false,
|
17
|
+
"disconnect_exception_classes" => nil,
|
18
|
+
"application_exception_classes" => nil,
|
19
|
+
"size" => 1,
|
20
|
+
"timeout" => 10,
|
21
|
+
"multiplexed" => false,
|
22
|
+
"client_class" => nil,
|
23
|
+
"servers" => ""
|
24
|
+
}
|
25
|
+
puts "\nsetup"
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_config
|
29
|
+
assert_raise ArgumentError do
|
30
|
+
client = ThriftClient.new(@config)
|
31
|
+
end
|
32
|
+
@config["client_class"] = "231"
|
33
|
+
assert_raise ArgumentError do
|
34
|
+
client = ThriftClient.new(@config)
|
35
|
+
end
|
36
|
+
@config["client_class"] = "Test::CommonService::"
|
37
|
+
assert_raise ArgumentError do
|
38
|
+
client = ThriftClient.new(@config)
|
39
|
+
end
|
40
|
+
@config["client_class"] = "Test::CommonService::Client"
|
41
|
+
assert_raise ArgumentError do
|
42
|
+
client = ThriftClient.new(@config)
|
43
|
+
end
|
44
|
+
@config["servers"] = "127.0.0.1:9000"
|
45
|
+
assert_nothing_raised ArgumentError do
|
46
|
+
client = ThriftClient.new(@config)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def teardown
|
51
|
+
super
|
52
|
+
puts "teardown"
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
$:.unshift File.expand_path("../../lib", __FILE__)
|
2
|
+
$:.unshift File.expand_path("../../test", __FILE__)
|
3
|
+
|
4
|
+
require "test/unit"
|
5
|
+
require "thrift_client/connection_pool"
|
6
|
+
require "thrift_client/pool/thread_connection_pool"
|
7
|
+
require "thrift_client/pool/fiber_connection_pool"
|
8
|
+
|
9
|
+
class ConnectionPoolTest < Test::Unit::TestCase
|
10
|
+
include Test::Unit::Assertions
|
11
|
+
def setup
|
12
|
+
super
|
13
|
+
puts "setup"
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_thread_connection_pool
|
17
|
+
pool = ThreadConnectionPool.new(:size => 5){
|
18
|
+
# sleep(1)
|
19
|
+
Time.now.to_s
|
20
|
+
}
|
21
|
+
threads = Array.new(200){
|
22
|
+
Thread.new {
|
23
|
+
# sleep(1)
|
24
|
+
pool.execute { |conn|
|
25
|
+
puts conn
|
26
|
+
# sleep(1)
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
sleep(5)
|
31
|
+
# threads.each { | thread |
|
32
|
+
# p thread
|
33
|
+
# thread.run
|
34
|
+
# # thread.join
|
35
|
+
# }
|
36
|
+
# Thread.main.join
|
37
|
+
end
|
38
|
+
|
39
|
+
def teardown
|
40
|
+
super
|
41
|
+
puts "teardown"
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
$:.unshift File.expand_path("../../lib", __FILE__)
|
2
|
+
$:.unshift File.expand_path("../../test", __FILE__)
|
3
|
+
|
4
|
+
require "test/unit"
|
5
|
+
require "thrift_client"
|
6
|
+
require 'thrift'
|
7
|
+
require 'yaml'
|
8
|
+
require "foobar/handler"
|
9
|
+
require "helper"
|
10
|
+
require 'em-synchrony'
|
11
|
+
require 'em-synchrony/fiber_iterator'
|
12
|
+
|
13
|
+
class EventMachineTransprotTest < Test::Unit::TestCase
|
14
|
+
include Test::Unit::Assertions
|
15
|
+
def setup
|
16
|
+
super
|
17
|
+
root = File.expand_path("../..", __FILE__)
|
18
|
+
@config = YAML.load_file(File.join(root, 'test/thrift_config.yaml'))
|
19
|
+
puts "setup"
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_eventmachine_transport_performence
|
23
|
+
em_use = 0
|
24
|
+
no_em_use = 0
|
25
|
+
EM.synchrony do
|
26
|
+
client = ThriftClient.new(@config['em_test'])
|
27
|
+
start = Time.now
|
28
|
+
EM::Synchrony::FiberIterator.new(0...100, 50).each do |i|
|
29
|
+
client.wait(1)
|
30
|
+
end
|
31
|
+
stop = Time.now
|
32
|
+
em_use = stop - start
|
33
|
+
EM.stop
|
34
|
+
end
|
35
|
+
EM.synchrony do
|
36
|
+
client = ThriftClient.new(@config['no_em_test'])
|
37
|
+
start = Time.now
|
38
|
+
EM::Synchrony::FiberIterator.new(0...100, 50).each do |i|
|
39
|
+
client.wait(1)
|
40
|
+
end
|
41
|
+
stop = Time.now
|
42
|
+
no_em_use = stop - start
|
43
|
+
EM.stop
|
44
|
+
end
|
45
|
+
# assert(em_use < no_em_use)
|
46
|
+
puts "eventmachine use #{em_use}"
|
47
|
+
puts "no eventmachine use #{no_em_use}"
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_eventmachine_transport_availability
|
51
|
+
EM.synchrony do
|
52
|
+
client = ThriftClient.new(@config['em_availability_test'])
|
53
|
+
client.getBar
|
54
|
+
client.getBar
|
55
|
+
EM.stop
|
56
|
+
end
|
57
|
+
EM.synchrony do
|
58
|
+
client = ThriftClient.new(@config['em_availability_test'])
|
59
|
+
start = Time.now
|
60
|
+
EM::Synchrony::FiberIterator.new(0...1000, 50).each do |i|
|
61
|
+
puts "do"
|
62
|
+
bar = Test::Bar.new
|
63
|
+
bar.a = i.to_s
|
64
|
+
bar.b = i
|
65
|
+
bar.c = true
|
66
|
+
bar.d = i.to_f
|
67
|
+
bar.e = i
|
68
|
+
ret = client.putBar bar
|
69
|
+
assert(ret)
|
70
|
+
end
|
71
|
+
stop = Time.now
|
72
|
+
em_use = stop - start
|
73
|
+
puts em_use
|
74
|
+
EM.stop
|
75
|
+
end
|
76
|
+
|
77
|
+
EM.synchrony do
|
78
|
+
client = ThriftClient.new(@config['em_availability_test'])
|
79
|
+
start = Time.now
|
80
|
+
EM::Synchrony::FiberIterator.new(0...1000, 50).each do |i|
|
81
|
+
bar = client.getBar
|
82
|
+
assert_equal("1111111111",bar.a)
|
83
|
+
assert_equal(11111111,bar.b)
|
84
|
+
assert_equal(false,bar.c)
|
85
|
+
assert_equal(1111111.232323,bar.d)
|
86
|
+
assert_equal(111111111111111,bar.e)
|
87
|
+
end
|
88
|
+
stop = Time.now
|
89
|
+
em_use = stop - start
|
90
|
+
puts em_use
|
91
|
+
EM.stop
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_eventmachine_reconnect
|
96
|
+
puts "should start new server on port 9001"
|
97
|
+
# sleep(5)
|
98
|
+
EM.synchrony do
|
99
|
+
client = ThriftClient.new(@config['em_availability_test'])
|
100
|
+
|
101
|
+
assert_nothing_raised do
|
102
|
+
bar = client.getBar
|
103
|
+
puts bar.inspect
|
104
|
+
assert_equal("1111111111",bar.a)
|
105
|
+
assert_equal(11111111,bar.b)
|
106
|
+
assert_equal(false,bar.c)
|
107
|
+
assert_equal(1111111.232323,bar.d)
|
108
|
+
assert_equal(111111111111111,bar.e)
|
109
|
+
end
|
110
|
+
|
111
|
+
puts "should shutdown new server on port 9001"
|
112
|
+
sleep(3)
|
113
|
+
|
114
|
+
assert_raise Thrift::TransportException do
|
115
|
+
client.getBar
|
116
|
+
end
|
117
|
+
|
118
|
+
puts "should start new server on port 9001"
|
119
|
+
sleep(5)
|
120
|
+
|
121
|
+
assert_nothing_raised do
|
122
|
+
client.getBar
|
123
|
+
end
|
124
|
+
EM.stop
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_timer
|
129
|
+
puts "should start new server on port 9001"
|
130
|
+
# sleep(5)
|
131
|
+
EM.synchrony do
|
132
|
+
client = ThriftClient.new(@config['em_test'])
|
133
|
+
i = 0
|
134
|
+
# EM::Synchrony::FiberIterator.new(0...1000, 1000).each do |i|
|
135
|
+
client.timeout
|
136
|
+
# end
|
137
|
+
EM.stop
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def teardown
|
142
|
+
super
|
143
|
+
# Test::Helper.shutdown_server
|
144
|
+
puts "teardown"
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
$:.unshift File.expand_path("../../lib", __FILE__)
|
2
|
+
$:.unshift File.expand_path("../../test", __FILE__)
|
3
|
+
|
4
|
+
require "test/unit"
|
5
|
+
require 'thrift'
|
6
|
+
require "thrift_client"
|
7
|
+
require "foobar/handler"
|
8
|
+
require "helper"
|
9
|
+
require 'yaml'
|
10
|
+
|
11
|
+
class MultiplexedTest < Test::Unit::TestCase
|
12
|
+
include Test::Unit::Assertions
|
13
|
+
def setup
|
14
|
+
super
|
15
|
+
root = File.expand_path("../..", __FILE__)
|
16
|
+
@config = YAML.load_file(File.join(root, 'test/thrift_config.yaml'))
|
17
|
+
Test::Helper.start_server
|
18
|
+
puts "setup"
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_multiplexed
|
22
|
+
client = ThriftClient.new(@config['multiplexed_test'])
|
23
|
+
puts "test start"
|
24
|
+
|
25
|
+
foo = client.getFoo
|
26
|
+
assert_equal(200000, foo.first)
|
27
|
+
assert_equal(222222222222222, foo.second)
|
28
|
+
assert_equal(2.2, foo.third)
|
29
|
+
assert_equal("222", foo.fourth)
|
30
|
+
|
31
|
+
assert_raise do
|
32
|
+
client.ping
|
33
|
+
end
|
34
|
+
puts "test stop"
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_error_multiplexed
|
38
|
+
client = ThriftClient.new(@config['multiplexed_error_test'])
|
39
|
+
assert_raise do
|
40
|
+
client.getFoo
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_profile
|
45
|
+
client = ThriftClient.new({"transport" => "eventmachine","size"=>50,"client_class" => "Passport::Thrift::RemoteUserProfileService::Client","servers" => "192.168.1.173:9100"})
|
46
|
+
EM.synchrony do
|
47
|
+
start = Time.now
|
48
|
+
EM::Synchrony::FiberIterator.new(0...100, 50).each do |i|
|
49
|
+
client.queryUserBasicInfo(3033)
|
50
|
+
end
|
51
|
+
stop = Time.now
|
52
|
+
em_use = stop - start
|
53
|
+
EM.stop
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def teardown
|
58
|
+
super
|
59
|
+
Test::Helper.shutdown_server
|
60
|
+
puts "teardown"
|
61
|
+
end
|
62
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thrift-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ted Wang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thrift
|
@@ -16,34 +16,48 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.9.
|
19
|
+
version: 0.9.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.9.
|
26
|
+
version: 0.9.1
|
27
27
|
description: Thrift client
|
28
28
|
email: ted@ximalaya.com
|
29
29
|
executables: []
|
30
30
|
extensions: []
|
31
31
|
extra_rdoc_files: []
|
32
32
|
files:
|
33
|
-
- lib/thrift_client/abstract_server.rb
|
34
|
-
- lib/thrift_client/abstract_thrift_client.rb
|
35
|
-
- lib/thrift_client/multi_client_server.rb
|
36
|
-
- lib/thrift_client/single_client_server.rb
|
37
|
-
- lib/thrift_client/thrift.rb
|
38
33
|
- lib/thrift_client.rb
|
39
|
-
-
|
40
|
-
-
|
41
|
-
-
|
42
|
-
-
|
43
|
-
-
|
44
|
-
-
|
34
|
+
- lib/thrift_client/abstract_thrift_client.rb
|
35
|
+
- lib/thrift_client/pool.rb
|
36
|
+
- lib/thrift_client/pool/fiber_connection_pool.rb
|
37
|
+
- lib/thrift_client/pool/thread_connection_pool.rb
|
38
|
+
- lib/thrift_client/server.rb
|
39
|
+
- lib/thrift_client/thrift/client.rb
|
40
|
+
- lib/thrift_client/thrift/processor.rb
|
41
|
+
- lib/thrift_client/thrift/protocol.rb
|
42
|
+
- lib/thrift_client/thrift/struct.rb
|
43
|
+
- lib/thrift_client/thrift/transport.rb
|
44
|
+
- test/em_test.rb
|
45
|
+
- test/foobar/bar_service.rb
|
46
|
+
- test/foobar/common_service.rb
|
47
|
+
- test/foobar/foo_service.rb
|
48
|
+
- test/foobar/foobar_constants.rb
|
49
|
+
- test/foobar/foobar_types.rb
|
50
|
+
- test/foobar/handler.rb
|
51
|
+
- test/helper.rb
|
45
52
|
- test/options_config_test.rb
|
46
|
-
- test/
|
53
|
+
- test/passport.rb
|
54
|
+
- test/start_server.rb
|
55
|
+
- test/test.rb
|
56
|
+
- test/test_client.rb
|
57
|
+
- test/test_config.rb
|
58
|
+
- test/test_connection_pool.rb
|
59
|
+
- test/test_eventmachine_transprot.rb
|
60
|
+
- test/test_multiplexed.rb
|
47
61
|
homepage: http://www.ximalaya.com
|
48
62
|
licenses:
|
49
63
|
- MIT2.0
|
@@ -64,16 +78,25 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
78
|
version: '0'
|
65
79
|
requirements: []
|
66
80
|
rubyforge_project:
|
67
|
-
rubygems_version: 2.
|
81
|
+
rubygems_version: 2.2.2
|
68
82
|
signing_key:
|
69
83
|
specification_version: 4
|
70
84
|
summary: A Thrift client wrapper that encapsulates some common behavior.
|
71
85
|
test_files:
|
72
|
-
- test/
|
73
|
-
- test/
|
74
|
-
- test/
|
75
|
-
- test/
|
76
|
-
- test/
|
77
|
-
- test/
|
86
|
+
- test/em_test.rb
|
87
|
+
- test/foobar/bar_service.rb
|
88
|
+
- test/foobar/common_service.rb
|
89
|
+
- test/foobar/foo_service.rb
|
90
|
+
- test/foobar/foobar_constants.rb
|
91
|
+
- test/foobar/foobar_types.rb
|
92
|
+
- test/foobar/handler.rb
|
93
|
+
- test/helper.rb
|
78
94
|
- test/options_config_test.rb
|
79
|
-
- test/
|
95
|
+
- test/passport.rb
|
96
|
+
- test/start_server.rb
|
97
|
+
- test/test.rb
|
98
|
+
- test/test_client.rb
|
99
|
+
- test/test_config.rb
|
100
|
+
- test/test_connection_pool.rb
|
101
|
+
- test/test_eventmachine_transprot.rb
|
102
|
+
- test/test_multiplexed.rb
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'thread'
|
2
|
-
require 'timeout'
|
3
|
-
=begin
|
4
|
-
multi client connection thrift server encapsulation
|
5
|
-
=end
|
6
|
-
class MultiClientServer < AbstractServer
|
7
|
-
|
8
|
-
def initialize(connect_string, options = {})
|
9
|
-
super
|
10
|
-
@pool_timeout = @options[:pool_timeout]
|
11
|
-
@pool = Array.new(@options[:size]) { client = create_client }
|
12
|
-
@mutex = Mutex.new
|
13
|
-
@resource = ConditionVariable.new
|
14
|
-
end
|
15
|
-
|
16
|
-
def active?
|
17
|
-
active = false
|
18
|
-
@pool.each {|client| active = client.open?; break if active}
|
19
|
-
return active
|
20
|
-
end
|
21
|
-
|
22
|
-
def destroy
|
23
|
-
@pool.each {|client| client.close if client}
|
24
|
-
end
|
25
|
-
|
26
|
-
def get_client
|
27
|
-
client = pop
|
28
|
-
if @test_on_borrow
|
29
|
-
if check_client(client)
|
30
|
-
return client
|
31
|
-
else
|
32
|
-
return nil
|
33
|
-
end
|
34
|
-
else
|
35
|
-
client
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def return_client(client)
|
40
|
-
client = create_client unless client.open?
|
41
|
-
@mutex.synchronize do
|
42
|
-
@pool.push client
|
43
|
-
@resource.broadcast
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
def pop
|
49
|
-
deadline = Time.now + @pool_timeout
|
50
|
-
@mutex.synchronize do
|
51
|
-
loop do
|
52
|
-
return @pool.pop unless @pool.empty?
|
53
|
-
to_wait = deadline - Time.now
|
54
|
-
raise Timeout::Error, "Waited #{@pool_timeout} seconds" if to_wait <= 0 and @pool_timeout > 0
|
55
|
-
@resource.wait(@mutex, to_wait)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|