thrift 0.9.2.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/ext/binary_protocol_accelerated.c +12 -12
  3. data/ext/compact_protocol.c +1 -0
  4. data/ext/struct.c +14 -1
  5. data/ext/thrift_native.c +17 -0
  6. data/lib/thrift/multiplexed_processor.rb +76 -0
  7. data/lib/thrift/processor.rb +24 -6
  8. data/lib/thrift/protocol/base_protocol.rb +11 -3
  9. data/lib/thrift/protocol/binary_protocol.rb +8 -1
  10. data/lib/thrift/protocol/binary_protocol_accelerated.rb +8 -0
  11. data/lib/thrift/protocol/compact_protocol.rb +8 -0
  12. data/lib/thrift/protocol/json_protocol.rb +21 -4
  13. data/lib/thrift/protocol/multiplexed_protocol.rb +44 -0
  14. data/lib/thrift/protocol/protocol_decorator.rb +194 -0
  15. data/lib/thrift/server/base_server.rb +8 -2
  16. data/lib/thrift/server/simple_server.rb +5 -1
  17. data/lib/thrift/server/thread_pool_server.rb +5 -1
  18. data/lib/thrift/server/threaded_server.rb +5 -1
  19. data/lib/thrift/transport/base_server_transport.rb +1 -1
  20. data/lib/thrift/transport/base_transport.rb +8 -0
  21. data/lib/thrift/transport/buffered_transport.rb +9 -1
  22. data/lib/thrift/transport/framed_transport.rb +9 -1
  23. data/lib/thrift/transport/http_client_transport.rb +7 -0
  24. data/lib/thrift/transport/io_stream_transport.rb +4 -1
  25. data/lib/thrift/transport/memory_buffer_transport.rb +4 -0
  26. data/lib/thrift/transport/server_socket.rb +6 -1
  27. data/lib/thrift/transport/socket.rb +21 -17
  28. data/lib/thrift/transport/ssl_server_socket.rb +41 -0
  29. data/lib/thrift/transport/ssl_socket.rb +51 -0
  30. data/lib/thrift/transport/unix_server_socket.rb +5 -1
  31. data/lib/thrift/transport/unix_socket.rb +5 -1
  32. data/lib/thrift/union.rb +3 -6
  33. data/lib/thrift.rb +8 -4
  34. data/spec/BaseService.thrift +27 -0
  35. data/spec/ExtendedService.thrift +25 -0
  36. data/spec/base_protocol_spec.rb +79 -71
  37. data/spec/base_transport_spec.rb +155 -117
  38. data/spec/binary_protocol_accelerated_spec.rb +6 -2
  39. data/spec/binary_protocol_spec.rb +16 -8
  40. data/spec/binary_protocol_spec_shared.rb +75 -72
  41. data/spec/bytes_spec.rb +38 -38
  42. data/spec/client_spec.rb +41 -42
  43. data/spec/compact_protocol_spec.rb +32 -17
  44. data/spec/exception_spec.rb +54 -54
  45. data/spec/flat_spec.rb +62 -0
  46. data/spec/http_client_spec.rb +74 -33
  47. data/spec/json_protocol_spec.rb +170 -131
  48. data/spec/namespaced_spec.rb +10 -5
  49. data/spec/nonblocking_server_spec.rb +16 -16
  50. data/spec/processor_spec.rb +26 -26
  51. data/spec/serializer_spec.rb +20 -20
  52. data/spec/server_socket_spec.rb +27 -22
  53. data/spec/server_spec.rb +91 -51
  54. data/spec/socket_spec.rb +23 -16
  55. data/spec/socket_spec_shared.rb +31 -31
  56. data/spec/spec_helper.rb +9 -1
  57. data/spec/ssl_server_socket_spec.rb +34 -0
  58. data/spec/ssl_socket_spec.rb +78 -0
  59. data/spec/struct_nested_containers_spec.rb +24 -24
  60. data/spec/struct_spec.rb +120 -120
  61. data/spec/thin_http_server_spec.rb +18 -18
  62. data/spec/types_spec.rb +56 -53
  63. data/spec/union_spec.rb +51 -40
  64. data/spec/unix_socket_spec.rb +43 -34
  65. metadata +205 -143
@@ -39,5 +39,9 @@ module Thrift
39
39
  @server_transport.close
40
40
  end
41
41
  end
42
+
43
+ def to_s
44
+ "simple(#{super.to_s})"
45
+ end
42
46
  end
43
- end
47
+ end
@@ -71,5 +71,9 @@ module Thrift
71
71
  @server_transport.close
72
72
  end
73
73
  end
74
+
75
+ def to_s
76
+ "threadpool(#{super.to_s})"
77
+ end
74
78
  end
75
- end
79
+ end
@@ -43,5 +43,9 @@ module Thrift
43
43
  @server_transport.close
44
44
  end
45
45
  end
46
+
47
+ def to_s
48
+ "threaded(#{super.to_s})"
49
+ end
46
50
  end
47
- end
51
+ end
@@ -34,4 +34,4 @@ module Thrift
34
34
  raise NotImplementedError
35
35
  end
36
36
  end
37
- end
37
+ end
@@ -99,11 +99,19 @@ module Thrift
99
99
  alias_method :<<, :write
100
100
 
101
101
  def flush; end
102
+
103
+ def to_s
104
+ "base"
105
+ end
102
106
  end
103
107
 
104
108
  class BaseTransportFactory
105
109
  def get_transport(trans)
106
110
  return trans
107
111
  end
112
+
113
+ def to_s
114
+ "base"
115
+ end
108
116
  end
109
117
  end
@@ -104,11 +104,19 @@ module Thrift
104
104
 
105
105
  @transport.flush
106
106
  end
107
+
108
+ def to_s
109
+ "buffered(#{@transport.to_s})"
110
+ end
107
111
  end
108
112
 
109
113
  class BufferedTransportFactory < BaseTransportFactory
110
114
  def get_transport(transport)
111
115
  return BufferedTransport.new(transport)
112
116
  end
117
+
118
+ def to_s
119
+ "buffered"
120
+ end
113
121
  end
114
- end
122
+ end
@@ -99,6 +99,10 @@ module Thrift
99
99
  @wbuf = Bytes.empty_byte_buffer
100
100
  end
101
101
 
102
+ def to_s
103
+ "framed(#{@transport.to_s})"
104
+ end
105
+
102
106
  private
103
107
 
104
108
  def read_frame
@@ -113,5 +117,9 @@ module Thrift
113
117
  def get_transport(transport)
114
118
  return FramedTransport.new(transport)
115
119
  end
120
+
121
+ def to_s
122
+ "framed"
123
+ end
116
124
  end
117
- end
125
+ end
@@ -47,10 +47,17 @@ module Thrift
47
47
  http.use_ssl = @url.scheme == 'https'
48
48
  http.verify_mode = @ssl_verify_mode if @url.scheme == 'https'
49
49
  resp = http.post(@url.request_uri, @outbuf, @headers)
50
+ raise TransportException.new(TransportException::UNKNOWN, "#{self.class.name} Could not connect to #{@url}, HTTP status code #{resp.code.to_i}") unless (200..299).include?(resp.code.to_i)
51
+
50
52
  data = resp.body
51
53
  data = Bytes.force_binary_encoding(data)
52
54
  @inbuf = StringIO.new data
55
+ ensure
53
56
  @outbuf = Bytes.empty_byte_buffer
54
57
  end
58
+
59
+ def to_s
60
+ "@{self.url}"
61
+ end
55
62
  end
56
63
  end
@@ -35,5 +35,8 @@ module Thrift
35
35
  def write(buf); @output.write(Bytes.force_binary_encoding(buf)) end
36
36
  def close; @input.close; @output.close end
37
37
  def to_io; @input end # we're assuming this is used in a IO.select for reading
38
+ def to_s
39
+ "iostream(input=#{@input.to_s},output=#{@output.to_s})"
40
+ end
38
41
  end
39
- end
42
+ end
@@ -121,5 +121,9 @@ module Thrift
121
121
  end
122
122
  out.join(" ")
123
123
  end
124
+
125
+ def to_s
126
+ "memory"
127
+ end
124
128
  end
125
129
  end
@@ -59,5 +59,10 @@ module Thrift
59
59
  end
60
60
 
61
61
  alias to_io handle
62
+
63
+ def to_s
64
+ "socket(#{@host}:#{@port})"
65
+ end
66
+
62
67
  end
63
- end
68
+ end
@@ -33,26 +33,28 @@ module Thrift
33
33
  attr_accessor :handle, :timeout
34
34
 
35
35
  def open
36
- begin
37
- addrinfo = ::Socket::getaddrinfo(@host, @port, nil, ::Socket::SOCK_STREAM).first
38
- @handle = ::Socket.new(addrinfo[4], ::Socket::SOCK_STREAM, 0)
39
- @handle.setsockopt(::Socket::IPPROTO_TCP, ::Socket::TCP_NODELAY, 1)
40
- sockaddr = ::Socket.sockaddr_in(addrinfo[1], addrinfo[3])
36
+ for addrinfo in ::Socket::getaddrinfo(@host, @port, nil, ::Socket::SOCK_STREAM) do
41
37
  begin
42
- @handle.connect_nonblock(sockaddr)
43
- rescue Errno::EINPROGRESS
44
- unless IO.select(nil, [ @handle ], nil, @timeout)
45
- raise TransportException.new(TransportException::NOT_OPEN, "Connection timeout to #{@desc}")
46
- end
38
+ socket = ::Socket.new(addrinfo[4], ::Socket::SOCK_STREAM, 0)
39
+ socket.setsockopt(::Socket::IPPROTO_TCP, ::Socket::TCP_NODELAY, 1)
40
+ sockaddr = ::Socket.sockaddr_in(addrinfo[1], addrinfo[3])
47
41
  begin
48
- @handle.connect_nonblock(sockaddr)
49
- rescue Errno::EISCONN
42
+ socket.connect_nonblock(sockaddr)
43
+ rescue Errno::EINPROGRESS
44
+ unless IO.select(nil, [ socket ], nil, @timeout)
45
+ next
46
+ end
47
+ begin
48
+ socket.connect_nonblock(sockaddr)
49
+ rescue Errno::EISCONN
50
+ end
50
51
  end
52
+ return @handle = socket
53
+ rescue StandardError => e
54
+ next
51
55
  end
52
- @handle
53
- rescue StandardError => e
54
- raise TransportException.new(TransportException::NOT_OPEN, "Could not connect to #{@desc}: #{e}")
55
56
  end
57
+ raise TransportException.new(TransportException::NOT_OPEN, "Could not connect to #{@desc}: #{e}")
56
58
  end
57
59
 
58
60
  def open?
@@ -132,8 +134,10 @@ module Thrift
132
134
  @handle = nil
133
135
  end
134
136
 
135
- def to_io
136
- @handle
137
+ alias to_io handle
138
+
139
+ def to_s
140
+ "socket(#{@host}:#{@port})"
137
141
  end
138
142
  end
139
143
  end
@@ -0,0 +1,41 @@
1
+ # encoding: ascii-8bit
2
+ #
3
+ # Licensed to the Apache Software Foundation (ASF) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The ASF licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+ #
20
+
21
+ require 'socket'
22
+
23
+ module Thrift
24
+ class SSLServerSocket < ServerSocket
25
+ def initialize(host_or_port, port = nil, ssl_context = nil)
26
+ super(host_or_port, port)
27
+ @ssl_context = ssl_context
28
+ end
29
+
30
+ attr_accessor :ssl_context
31
+
32
+ def listen
33
+ socket = TCPServer.new(@host, @port)
34
+ @handle = OpenSSL::SSL::SSLServer.new(socket, @ssl_context)
35
+ end
36
+
37
+ def to_s
38
+ "ssl(#{super.to_s})"
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,51 @@
1
+ # encoding: ascii-8bit
2
+ #
3
+ # Licensed to the Apache Software Foundation (ASF) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The ASF licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ module Thrift
21
+ class SSLSocket < Socket
22
+ def initialize(host='localhost', port=9090, timeout=nil, ssl_context=nil)
23
+ super(host, port, timeout)
24
+ @ssl_context = ssl_context
25
+ end
26
+
27
+ attr_accessor :ssl_context
28
+
29
+ def open
30
+ socket = super
31
+ @handle = OpenSSL::SSL::SSLSocket.new(socket, @ssl_context)
32
+ begin
33
+ @handle.connect_nonblock
34
+ @handle.post_connection_check(@host)
35
+ @handle
36
+ rescue IO::WaitReadable
37
+ IO.select([ @handle ], nil, nil, @timeout)
38
+ retry
39
+ rescue IO::WaitWritable
40
+ IO.select(nil, [ @handle ], nil, @timeout)
41
+ retry
42
+ rescue StandardError => e
43
+ raise TransportException.new(TransportException::NOT_OPEN, "Could not connect to #{@desc}: #{e}")
44
+ end
45
+ end
46
+
47
+ def to_s
48
+ "ssl(#{super.to_s})"
49
+ end
50
+ end
51
+ end
@@ -56,5 +56,9 @@ module Thrift
56
56
  end
57
57
 
58
58
  alias to_io handle
59
+
60
+ def to_s
61
+ "domain(#{@path})"
62
+ end
59
63
  end
60
- end
64
+ end
@@ -36,5 +36,9 @@ module Thrift
36
36
  raise TransportException.new(TransportException::NOT_OPEN, "Could not open UNIX socket at #{@path}")
37
37
  end
38
38
  end
39
+
40
+ def to_s
41
+ "domain(#{@path})"
42
+ end
39
43
  end
40
- end
44
+ end
data/lib/thrift/union.rb CHANGED
@@ -87,12 +87,9 @@ module Thrift
87
87
  end
88
88
 
89
89
  def ==(other)
90
- other != nil && @setfield == other.get_set_field && @value == other.get_value
91
- end
92
-
93
- def eql?(other)
94
- self.class == other.class && self == other
90
+ other.equal?(self) || other.instance_of?(self.class) && @setfield == other.get_set_field && @value == other.get_value
95
91
  end
92
+ alias_method :eql?, :==
96
93
 
97
94
  def hash
98
95
  [self.class.name, @setfield, @value].hash
@@ -176,4 +173,4 @@ module Thrift
176
173
  end
177
174
  end
178
175
  end
179
- end
176
+ end
data/lib/thrift.rb CHANGED
@@ -1,4 +1,4 @@
1
- #
1
+ #
2
2
  # Licensed to the Apache Software Foundation (ASF) under one
3
3
  # or more contributor license agreements. See the NOTICE file
4
4
  # distributed with this work for additional information
@@ -6,16 +6,16 @@
6
6
  # to you under the Apache License, Version 2.0 (the
7
7
  # "License"); you may not use this file except in compliance
8
8
  # with the License. You may obtain a copy of the License at
9
- #
9
+ #
10
10
  # http://www.apache.org/licenses/LICENSE-2.0
11
- #
11
+ #
12
12
  # Unless required by applicable law or agreed to in writing,
13
13
  # software distributed under the License is distributed on an
14
14
  # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
15
  # KIND, either express or implied. See the License for the
16
16
  # specific language governing permissions and limitations
17
17
  # under the License.
18
- #
18
+ #
19
19
  # Contains some contributions under the Thrift Software License.
20
20
  # Please see doc/old-thrift-license.txt in the Thrift distribution for
21
21
  # details.
@@ -27,6 +27,7 @@ require 'thrift/core_ext'
27
27
  require 'thrift/exceptions'
28
28
  require 'thrift/types'
29
29
  require 'thrift/processor'
30
+ require 'thrift/multiplexed_processor'
30
31
  require 'thrift/client'
31
32
  require 'thrift/struct'
32
33
  require 'thrift/union'
@@ -42,12 +43,15 @@ require 'thrift/protocol/binary_protocol'
42
43
  require 'thrift/protocol/binary_protocol_accelerated'
43
44
  require 'thrift/protocol/compact_protocol'
44
45
  require 'thrift/protocol/json_protocol'
46
+ require 'thrift/protocol/multiplexed_protocol'
45
47
 
46
48
  # transport
47
49
  require 'thrift/transport/base_transport'
48
50
  require 'thrift/transport/base_server_transport'
49
51
  require 'thrift/transport/socket'
52
+ require 'thrift/transport/ssl_socket'
50
53
  require 'thrift/transport/server_socket'
54
+ require 'thrift/transport/ssl_server_socket'
51
55
  require 'thrift/transport/unix_socket'
52
56
  require 'thrift/transport/unix_server_socket'
53
57
  require 'thrift/transport/buffered_transport'
@@ -0,0 +1,27 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+ #
18
+
19
+ namespace rb Base
20
+
21
+ struct Hello {
22
+ 1: string greeting = "hello world"
23
+ }
24
+
25
+ service BaseService {
26
+ Hello greeting(1:bool english)
27
+ }
@@ -0,0 +1,25 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+ #
18
+
19
+ namespace rb Extended
20
+
21
+ include "BaseService.thrift"
22
+
23
+ service ExtendedService extends BaseService.BaseService {
24
+ void ping()
25
+ }