protobuf 2.7.11-java → 2.8.0.beta1-java

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.
Files changed (41) hide show
  1. data/README.md +39 -2
  2. data/lib/protobuf.rb +17 -26
  3. data/lib/protobuf/cli.rb +106 -86
  4. data/lib/protobuf/field/float_field.rb +5 -1
  5. data/lib/protobuf/rpc/connectors/base.rb +1 -1
  6. data/lib/protobuf/rpc/connectors/zmq.rb +157 -29
  7. data/lib/protobuf/rpc/dynamic_discovery.pb.rb +49 -0
  8. data/lib/protobuf/rpc/error/client_error.rb +5 -5
  9. data/lib/protobuf/rpc/error/server_error.rb +7 -7
  10. data/lib/protobuf/rpc/rpc.pb.rb +13 -12
  11. data/lib/protobuf/rpc/servers/evented_runner.rb +11 -6
  12. data/lib/protobuf/rpc/servers/socket/server.rb +19 -15
  13. data/lib/protobuf/rpc/servers/socket_runner.rb +21 -18
  14. data/lib/protobuf/rpc/servers/zmq/broker.rb +104 -94
  15. data/lib/protobuf/rpc/servers/zmq/server.rb +263 -43
  16. data/lib/protobuf/rpc/servers/zmq/util.rb +18 -6
  17. data/lib/protobuf/rpc/servers/zmq/worker.rb +102 -39
  18. data/lib/protobuf/rpc/servers/zmq_runner.rb +31 -20
  19. data/lib/protobuf/rpc/service.rb +24 -12
  20. data/lib/protobuf/rpc/service_directory.rb +206 -0
  21. data/lib/protobuf/rpc/stat.rb +1 -1
  22. data/lib/protobuf/version.rb +1 -1
  23. data/proto/dynamic_discovery.proto +44 -0
  24. data/spec/benchmark/tasks.rb +1 -3
  25. data/spec/functional/socket_server_spec.rb +6 -5
  26. data/spec/functional/zmq_server_spec.rb +59 -30
  27. data/spec/lib/protobuf/cli_spec.rb +49 -54
  28. data/spec/lib/protobuf/enum_spec.rb +1 -1
  29. data/spec/lib/protobuf/rpc/client_spec.rb +1 -1
  30. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +43 -1
  31. data/spec/lib/protobuf/rpc/servers/evented_server_spec.rb +2 -1
  32. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +9 -8
  33. data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +24 -19
  34. data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +5 -5
  35. data/spec/lib/protobuf/rpc/service_directory_spec.rb +183 -0
  36. data/spec/support/server.rb +21 -12
  37. data/spec/support/test/resource.pb.rb +6 -0
  38. data/spec/support/test/resource.proto +5 -0
  39. data/spec/support/test/resource_service.rb +7 -0
  40. metadata +11 -11
  41. data/spec/lib/protobuf/rpc/servers/zmq/broker_spec.rb +0 -31
@@ -27,7 +27,7 @@ module Protobuf
27
27
  end
28
28
 
29
29
  def method_name
30
- @method_name ||= @dispatcher.try(:service).try(:rpc)
30
+ @method_name ||= @dispatcher.try(:service).try(:method_name)
31
31
  end
32
32
 
33
33
  def server=(peer)
@@ -1,4 +1,4 @@
1
1
  module Protobuf
2
- VERSION = '2.7.11'
2
+ VERSION = '2.8.0.beta1'
3
3
  PROTOC_VERSION = '2.4.1'
4
4
  end
@@ -0,0 +1,44 @@
1
+ // Copyright (c) 2013 MoneyDesktop, Inc.
2
+ //
3
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ // of this software and associated documentation files (the "Software"), to deal
5
+ // in the Software without restriction, including without limitation the rights
6
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ // copies of the Software, and to permit persons to whom the Software is
8
+ // furnished to do so, subject to the following conditions:
9
+ //
10
+ // The above copyright notice and this permission notice shall be included in
11
+ // all copies or substantial portions of the Software.
12
+ //
13
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ // THE SOFTWARE.
20
+
21
+ // Authors: Devin Christensen
22
+ //
23
+ // Protobufs needed for dynamic discovery zmq server and client.
24
+
25
+ package protobuf.rpc.dynamicDiscovery;
26
+
27
+ enum BeaconType {
28
+ HEARTBEAT = 0;
29
+ FLATLINE = 1;
30
+ }
31
+
32
+ message Server {
33
+ optional string uuid = 1;
34
+ optional string address = 2;
35
+ optional string port = 3;
36
+ optional int32 ttl = 4;
37
+ repeated string services = 5;
38
+ }
39
+
40
+ message Beacon {
41
+ optional BeaconType beacon_type = 1;
42
+ optional Server server = 2;
43
+ }
44
+
@@ -32,9 +32,7 @@ namespace :benchmark do
32
32
  EM.stop if EM.reactor_running?
33
33
 
34
34
  EventMachine.fiber_run do
35
- StubServer.new do |server|
36
- client = ::Test::ResourceService.client
37
-
35
+ StubServer.new(:server => Protobuf::Rpc::Evented::Server) do |server|
38
36
  benchmark_wrapper(global_bench) do |bench|
39
37
  bench.report("ES / EC") do
40
38
  (1..number_tests.to_i).each { client.find(:name => "Test Name" * test_length.to_i, :active => true) }
@@ -4,14 +4,14 @@ require 'spec/support/test/resource_service'
4
4
  describe 'Functional Socket Client' do
5
5
  before(:all) do
6
6
  load "protobuf/socket.rb"
7
- Thread.abort_on_exception = true
8
- server = OpenStruct.new(:host => "127.0.0.1", :port => 9399, :backlog => 100, :threshold => 100)
9
- @server_thread = Thread.new(server) { |s| Protobuf::Rpc::SocketRunner.run(s) }
10
- Thread.pass until Protobuf::Rpc::Socket::Server.running?
7
+ @options = OpenStruct.new(:host => "127.0.0.1", :port => 9399, :backlog => 100, :threshold => 100)
8
+ @runner = ::Protobuf::Rpc::SocketRunner.new(@options)
9
+ @server_thread = Thread.new(@runner) { |runner| runner.run }
10
+ Thread.pass until @runner.running?
11
11
  end
12
12
 
13
13
  after(:all) do
14
- Protobuf::Rpc::SocketRunner.stop
14
+ @runner.stop
15
15
  @server_thread.join
16
16
  end
17
17
 
@@ -56,3 +56,4 @@ describe 'Functional Socket Client' do
56
56
  error.message.should =~ /expected request.*ResourceFindRequest.*Resource instead/i
57
57
  end
58
58
  end
59
+
@@ -1,24 +1,29 @@
1
1
  require 'spec_helper'
2
2
  require 'spec/support/test/resource_service'
3
+ require 'protobuf/rpc/service_directory'
3
4
 
4
5
  describe 'Functional ZMQ Client' do
5
- before(:all) do
6
- load "protobuf/zmq.rb"
7
- Thread.abort_on_exception = true
8
- server = OpenStruct.new(:host => "127.0.0.1",
9
- :port => 9399,
10
- :worker_port => 9400,
11
- :backlog => 100,
12
- :threshold => 100,
13
- :threads => 5)
6
+ let(:options) {{
7
+ :host => "127.0.0.1",
8
+ :port => 9399,
9
+ :worker_port => 9400,
10
+ :backlog => 100,
11
+ :threshold => 100,
12
+ :threads => 5
13
+ }}
14
+
15
+ let(:server) { ::Protobuf::Rpc::Zmq::Server.new(options) }
16
+ let(:server_thread) { Thread.new(server) { |server| server.run } }
14
17
 
15
- @server_thread = Thread.new(server) { |s| Protobuf::Rpc::ZmqRunner.run(s) }
16
- Thread.pass until Protobuf::Rpc::Zmq::Server.running?
18
+ before do
19
+ load "protobuf/zmq.rb"
20
+ server_thread.abort_on_exception = true
21
+ Thread.pass until server.running?
17
22
  end
18
23
 
19
- after(:all) do
20
- ::Protobuf::Rpc::Zmq::Server.stop
21
- @server_thread.try(:join)
24
+ after do
25
+ server.stop
26
+ server_thread.join
22
27
  end
23
28
 
24
29
  it 'runs fine when required fields are set' do
@@ -38,27 +43,51 @@ describe 'Functional ZMQ Client' do
38
43
  }.to_not raise_error
39
44
  end
40
45
 
41
- it 'calls the on_failure callback when a message is malformed' do
42
- error = nil
43
- request = ::Test::ResourceFindRequest.new(:active => true)
44
- client = ::Test::ResourceService.client
46
+ context 'when a message is malformed' do
47
+ it 'calls the on_failure callback' do
48
+ error = nil
49
+ StubServer.new(:server => Protobuf::Rpc::Zmq::Server) do
50
+ request = ::Test::ResourceFindRequest.new(:active => true)
51
+ client = ::Test::ResourceService.client
52
+
53
+ client.find(request) do |c|
54
+ c.on_success { raise "shouldn't pass" }
55
+ c.on_failure {|e| error = e }
56
+ end
57
+ end
58
+ error.message.should match(/name.*required/)
59
+ end
60
+ end
61
+
62
+ context 'when the request type is wrong' do
63
+ it 'calls the on_failure callback' do
64
+ error = nil
65
+ StubServer.new(:server => Protobuf::Rpc::Zmq::Server) do
66
+ request = ::Test::Resource.new(:name => 'Test Name')
67
+ client = ::Test::ResourceService.client
45
68
 
46
- client.find(request) do |c|
47
- c.on_success { raise "shouldn't pass"}
48
- c.on_failure {|e| error = e}
69
+ client.find(request) do |c|
70
+ c.on_success { raise "shouldn't pass" }
71
+ c.on_failure {|e| error = e}
72
+ end
73
+ end
74
+ error.message.should match(/expected request.*ResourceFindRequest.*Resource instead/i)
49
75
  end
50
- error.message.should =~ /name.*required/
51
76
  end
52
77
 
53
- it 'calls the on_failure callback when the request type is wrong' do
54
- error = nil
55
- request = ::Test::Resource.new(:name => 'Test Name')
56
- client = ::Test::ResourceService.client
78
+ context 'when the server takes too long to respond' do
79
+ it 'responds with a timeout error' do
80
+ error = nil
81
+ StubServer.new(:server => Protobuf::Rpc::Zmq::Server) do
82
+ client = ::Test::ResourceService.client(:timeout => 1)
57
83
 
58
- client.find(request) do |c|
59
- c.on_success { raise "shouldn't pass"}
60
- c.on_failure {|e| error = e}
84
+ client.find_with_sleep(:sleep => 2) do |c|
85
+ c.on_success { raise "shouldn't pass" }
86
+ c.on_failure { |e| error = e }
87
+ end
88
+ end
89
+ error.message.should match(/The server took longer than 1 seconds to respond/i)
61
90
  end
62
- error.message.should =~ /expected request.*ResourceFindRequest.*Resource instead/i
63
91
  end
92
+
64
93
  end
@@ -7,10 +7,14 @@ describe ::Protobuf::CLI do
7
7
  File.expand_path('../../../support/test_app_file.rb', __FILE__)
8
8
  end
9
9
 
10
- before do
11
- ::Protobuf::Rpc::SocketRunner.stub(:run)
12
- ::Protobuf::Rpc::ZmqRunner.stub(:run)
13
- ::Protobuf::Rpc::EventedRunner.stub(:run)
10
+ let(:sock_runner) { double "SocketRunner", run: nil, register_signals: nil }
11
+ let(:zmq_runner) { double "ZmqRunner", run: nil, register_signals: nil }
12
+ let(:evented_runner) { double "EventedRunner", run: nil, register_signals: nil }
13
+
14
+ before(:each) do
15
+ ::Protobuf::Rpc::SocketRunner.stub(:new) { sock_runner }
16
+ ::Protobuf::Rpc::ZmqRunner.stub(:new) { zmq_runner }
17
+ ::Protobuf::Rpc::EventedRunner.stub(:new) { evented_runner }
14
18
  end
15
19
 
16
20
  describe '#start' do
@@ -22,9 +26,9 @@ describe ::Protobuf::CLI do
22
26
  let(:test_args) { [ '--host=123.123.123.123' ] }
23
27
 
24
28
  it 'sends the host option to the runner' do
25
- ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
29
+ ::Protobuf::Rpc::SocketRunner.should_receive(:new) do |options|
26
30
  options[:host].should eq '123.123.123.123'
27
- end
31
+ end.and_return(sock_runner)
28
32
  described_class.start(args)
29
33
  end
30
34
  end
@@ -33,9 +37,9 @@ describe ::Protobuf::CLI do
33
37
  let(:test_args) { [ '--port=12345' ] }
34
38
 
35
39
  it 'sends the port option to the runner' do
36
- ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
40
+ ::Protobuf::Rpc::SocketRunner.should_receive(:new) do |options|
37
41
  options[:port].should eq 12345
38
- end
42
+ end.and_return(sock_runner)
39
43
  described_class.start(args)
40
44
  end
41
45
  end
@@ -44,9 +48,9 @@ describe ::Protobuf::CLI do
44
48
  let(:test_args) { [ '--threads=500' ] }
45
49
 
46
50
  it 'sends the threads option to the runner' do
47
- ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
51
+ ::Protobuf::Rpc::SocketRunner.should_receive(:new) do |options|
48
52
  options[:threads].should eq 500
49
- end
53
+ end.and_return(sock_runner)
50
54
  described_class.start(args)
51
55
  end
52
56
  end
@@ -55,9 +59,9 @@ describe ::Protobuf::CLI do
55
59
  let(:test_args) { [ '--backlog=500' ] }
56
60
 
57
61
  it 'sends the backlog option to the runner' do
58
- ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
62
+ ::Protobuf::Rpc::SocketRunner.should_receive(:new) do |options|
59
63
  options[:backlog].should eq 500
60
- end
64
+ end.and_return(sock_runner)
61
65
  described_class.start(args)
62
66
  end
63
67
  end
@@ -66,9 +70,9 @@ describe ::Protobuf::CLI do
66
70
  let(:test_args) { [ '--threshold=500' ] }
67
71
 
68
72
  it 'sends the backlog option to the runner' do
69
- ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
73
+ ::Protobuf::Rpc::SocketRunner.should_receive(:new) do |options|
70
74
  options[:threshold].should eq 500
71
- end
75
+ end.and_return(sock_runner)
72
76
  described_class.start(args)
73
77
  end
74
78
  end
@@ -83,17 +87,6 @@ describe ::Protobuf::CLI do
83
87
  end
84
88
  described_class.start(args)
85
89
  end
86
-
87
- context 'when debugging' do
88
- let(:test_args) { [ '--level=3', '--debug' ] }
89
-
90
- it 'overrides the log-level to DEBUG' do
91
- ::Protobuf::Logger.should_receive(:configure) do |options|
92
- options[:level].should eq ::Logger::DEBUG
93
- end
94
- described_class.start(args)
95
- end
96
- end
97
90
  end
98
91
 
99
92
  context 'gc options' do
@@ -103,16 +96,18 @@ describe ::Protobuf::CLI do
103
96
 
104
97
  it 'sets both request and serialization pausing to false' do
105
98
  described_class.start(args)
106
- ::Protobuf.gc_pause_server_request?.should be_false
99
+ ::Protobuf.should_not be_gc_pause_server_request
107
100
  end
108
101
  end
109
102
 
110
- context 'request pausing' do
111
- let(:test_args) { [ '--gc_pause_request' ] }
103
+ unless defined?(JRUBY_VERSION)
104
+ context 'request pausing' do
105
+ let(:test_args) { [ '--gc_pause_request' ] }
112
106
 
113
- it 'sets the configuration option to GC pause server request' do
114
- described_class.start(args)
115
- ::Protobuf.gc_pause_server_request?.should be_true
107
+ it 'sets the configuration option to GC pause server request' do
108
+ described_class.start(args)
109
+ ::Protobuf.should be_gc_pause_server_request
110
+ end
116
111
  end
117
112
  end
118
113
  end
@@ -167,18 +162,18 @@ describe ::Protobuf::CLI do
167
162
  let(:runner) { ::Protobuf::Rpc::SocketRunner }
168
163
 
169
164
  before do
170
- ::Protobuf::Rpc::EventedRunner.should_not_receive(:run)
171
- ::Protobuf::Rpc::ZmqRunner.should_not_receive(:run)
165
+ ::Protobuf::Rpc::EventedRunner.should_not_receive(:new)
166
+ ::Protobuf::Rpc::ZmqRunner.should_not_receive(:new)
172
167
  end
173
168
 
174
169
  it 'is activated by the --socket switch' do
175
- runner.should_receive(:run)
170
+ runner.should_receive(:new)
176
171
  described_class.start(args)
177
172
  end
178
173
 
179
174
  it 'is activated by PB_SERVER_TYPE=Socket ENV variable' do
180
175
  ENV['PB_SERVER_TYPE'] = "Socket"
181
- runner.should_receive(:run)
176
+ runner.should_receive(:new).and_return(sock_runner)
182
177
  described_class.start(args)
183
178
  ENV.delete('PB_SERVER_TYPE')
184
179
  end
@@ -194,18 +189,18 @@ describe ::Protobuf::CLI do
194
189
  let(:runner) { ::Protobuf::Rpc::EventedRunner }
195
190
 
196
191
  before do
197
- ::Protobuf::Rpc::SocketRunner.should_not_receive(:run)
198
- ::Protobuf::Rpc::ZmqRunner.should_not_receive(:run)
192
+ ::Protobuf::Rpc::SocketRunner.should_not_receive(:new)
193
+ ::Protobuf::Rpc::ZmqRunner.should_not_receive(:new)
199
194
  end
200
195
 
201
196
  it 'is activated by the --evented switch' do
202
- runner.should_receive(:run)
197
+ runner.should_receive(:new).and_return(evented_runner)
203
198
  described_class.start(args)
204
199
  end
205
200
 
206
201
  it 'is activated by PB_SERVER_TYPE=Evented ENV variable' do
207
202
  ENV['PB_SERVER_TYPE'] = "Evented"
208
- runner.should_receive(:run)
203
+ runner.should_receive(:new).and_return(evented_runner)
209
204
  described_class.start(args)
210
205
  ENV.delete('PB_SERVER_TYPE')
211
206
  end
@@ -215,29 +210,29 @@ describe ::Protobuf::CLI do
215
210
  ::Protobuf.connector_type.should == :evented
216
211
  end
217
212
  end
218
-
213
+
219
214
  context 'zmq workers only' do
220
215
  let(:test_args) { [ '--workers_only', '--zmq' ] }
221
216
  let(:runner) { ::Protobuf::Rpc::ZmqRunner }
222
217
 
223
218
  before do
224
- ::Protobuf::Rpc::SocketRunner.should_not_receive(:run)
225
- ::Protobuf::Rpc::EventedRunner.should_not_receive(:run)
219
+ ::Protobuf::Rpc::SocketRunner.should_not_receive(:new)
220
+ ::Protobuf::Rpc::EventedRunner.should_not_receive(:new)
226
221
  end
227
222
 
228
223
  it 'is activated by the --workers_only switch' do
229
- runner.should_receive(:run) do |options|
224
+ runner.should_receive(:new) do |options|
230
225
  options[:workers_only].should be_true
231
- end
226
+ end.and_return(zmq_runner)
232
227
 
233
228
  described_class.start(args)
234
229
  end
235
230
 
236
231
  it 'is activated by PB_WORKERS_ONLY=1 ENV variable' do
237
232
  ENV['PB_WORKERS_ONLY'] = "1"
238
- runner.should_receive(:run) do |options|
233
+ runner.should_receive(:new) do |options|
239
234
  options[:workers_only].should be_true
240
- end
235
+ end.and_return(zmq_runner)
241
236
 
242
237
  described_class.start(args)
243
238
  ENV.delete('PB_WORKERS_ONLY')
@@ -249,14 +244,14 @@ describe ::Protobuf::CLI do
249
244
  let(:runner) { ::Protobuf::Rpc::ZmqRunner }
250
245
 
251
246
  before do
252
- ::Protobuf::Rpc::SocketRunner.should_not_receive(:run)
253
- ::Protobuf::Rpc::EventedRunner.should_not_receive(:run)
247
+ ::Protobuf::Rpc::SocketRunner.should_not_receive(:new)
248
+ ::Protobuf::Rpc::EventedRunner.should_not_receive(:new)
254
249
  end
255
250
 
256
251
  it 'is activated by the --worker_port switch' do
257
- runner.should_receive(:run) do |options|
252
+ runner.should_receive(:new) do |options|
258
253
  options[:worker_port].should eq(1234)
259
- end
254
+ end.and_return(zmq_runner)
260
255
 
261
256
  described_class.start(args)
262
257
  end
@@ -267,18 +262,18 @@ describe ::Protobuf::CLI do
267
262
  let(:runner) { ::Protobuf::Rpc::ZmqRunner }
268
263
 
269
264
  before do
270
- ::Protobuf::Rpc::SocketRunner.should_not_receive(:run)
271
- ::Protobuf::Rpc::EventedRunner.should_not_receive(:run)
265
+ ::Protobuf::Rpc::SocketRunner.should_not_receive(:new)
266
+ ::Protobuf::Rpc::EventedRunner.should_not_receive(:new)
272
267
  end
273
268
 
274
269
  it 'is activated by the --zmq switch' do
275
- runner.should_receive(:run)
270
+ runner.should_receive(:new)
276
271
  described_class.start(args)
277
272
  end
278
273
 
279
274
  it 'is activated by PB_SERVER_TYPE=Zmq ENV variable' do
280
275
  ENV['PB_SERVER_TYPE'] = "Zmq"
281
- runner.should_receive(:run)
276
+ runner.should_receive(:new)
282
277
  described_class.start(args)
283
278
  ENV.delete('PB_SERVER_TYPE')
284
279
  end