protobuf 3.0.0.rc1 → 3.0.0.rc2
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.
- checksums.yaml +4 -4
- data/.travis.yml +8 -4
- data/CHANGES.md +12 -0
- data/lib/protobuf/field/base_field.rb +5 -0
- data/lib/protobuf/field/bytes_field.rb +2 -5
- data/lib/protobuf/rpc/connectors/base.rb +15 -9
- data/lib/protobuf/rpc/connectors/zmq.rb +22 -8
- data/lib/protobuf/rpc/servers/zmq/broker.rb +10 -3
- data/lib/protobuf/rpc/servers/zmq/util.rb +3 -0
- data/lib/protobuf/version.rb +1 -1
- data/spec/support/test/google_unittest.pb.rb +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8eb56b50b5911d64b5634ac4c82dd27ba291c70
|
4
|
+
data.tar.gz: 0f1707982fc81dcca0638f51a7efc0a91b50c11b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 140f2c71c05670f79fe461ec55307c42d2c32a839a07e568e627193dfbec4efd252d1bbd807050aa9cff2f52e196f225d531498bd5b95a6204ea54a0038e5399
|
7
|
+
data.tar.gz: 054234f0c8236ce49675694c9efc217d1c2c8a689472ef42b47523266ca18b9f4aa6b7b7519e1ea385213395e76571074b336b212604b61f88867af04a8668fa
|
data/.travis.yml
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- "1.9.2"
|
4
3
|
- "1.9.3"
|
5
4
|
- "2.0.0"
|
6
|
-
script: NO_COMPILE_TEST_PROTOS=1 bundle exec rake spec
|
7
|
-
|
8
|
-
|
5
|
+
script: NO_COMPILE_TEST_PROTOS=1 bundle exec rake spec/lib
|
6
|
+
notifications:
|
7
|
+
webhooks:
|
8
|
+
urls:
|
9
|
+
- https://webhooks.gitter.im/e/51a956bcd2b1854d6756
|
10
|
+
on_success: change # options: [always|never|change] default: always
|
11
|
+
on_failure: always # options: [always|never|change] default: always
|
12
|
+
on_start: false # default: false
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# Unstable
|
2
2
|
|
3
|
+
3.0.0.rc2
|
4
|
+
---------
|
5
|
+
|
6
|
+
Please read the [rc1 section below](#300rc1) for the greater changeset.
|
7
|
+
|
8
|
+
- Add support for assigning a symbol to a string or bytes field. [#181, @abrandoned]
|
9
|
+
- Add `first_alive_load_balance` option to rpc server. Pass `PB_FIRST_ALIVE_LOAD_BALANCE`
|
10
|
+
as an env variable to the client process to ensure the client asks the server
|
11
|
+
if it is alive (able to server requests to clients). [#183, @abrandoned]
|
12
|
+
|
13
|
+
|
3
14
|
3.0.0.rc1
|
4
15
|
---------
|
5
16
|
|
@@ -48,6 +59,7 @@ __!! NOTE: These deprecated methods will be removed in v3.1. !!__
|
|
48
59
|
|
49
60
|
#### Breaking Changes
|
50
61
|
|
62
|
+
- Require Active Support 3.2+. [#177]
|
51
63
|
- All files/classes relating to the EventMachine client and server are gone. Use `PB_CLIENT_TYPE` and `PB_SERVER_TYPE` of `socket` instead. [#116]
|
52
64
|
- Cleaned up the `Enum` class, deprecating/renaming most methods. tl;dr, just use `MyEnum.fetch`.
|
53
65
|
See #134 for more comprehensive documentation about which methods are going and away and which are being renamed. [#134]
|
@@ -23,11 +23,7 @@ module Protobuf
|
|
23
23
|
#
|
24
24
|
|
25
25
|
def acceptable?(val)
|
26
|
-
|
27
|
-
return true
|
28
|
-
else
|
29
|
-
raise TypeError, "Cannot set field : #{name} to value : #{val}"
|
30
|
-
end
|
26
|
+
val.nil? || val.is_a?(String) || val.is_a?(Symbol) || val.is_a?(::Protobuf::Message)
|
31
27
|
end
|
32
28
|
|
33
29
|
def decode(bytes)
|
@@ -61,6 +57,7 @@ module Protobuf
|
|
61
57
|
define_method(field.setter_method_name) do |val|
|
62
58
|
begin
|
63
59
|
field.warn_if_deprecated
|
60
|
+
val = "#{val}" if val.is_a?(Symbol)
|
64
61
|
|
65
62
|
if val.nil?
|
66
63
|
@values.delete(field.name)
|
@@ -10,15 +10,16 @@ module Protobuf
|
|
10
10
|
module Rpc
|
11
11
|
module Connectors
|
12
12
|
DEFAULT_OPTIONS = {
|
13
|
-
:service
|
14
|
-
:method
|
15
|
-
:host
|
16
|
-
:port
|
17
|
-
:request
|
18
|
-
:request_type
|
19
|
-
:response_type
|
20
|
-
:timeout
|
21
|
-
:client_host
|
13
|
+
:service => nil, # Fully-qualified Service class
|
14
|
+
:method => nil, # Service method to invoke
|
15
|
+
:host => '127.0.0.1', # The hostname or address of the service (usually overridden)
|
16
|
+
:port => '9399', # The port of the service (usually overridden or pre-configured)
|
17
|
+
:request => nil, # The request object sent by the client
|
18
|
+
:request_type => nil, # The request type expected by the client
|
19
|
+
:response_type => nil, # The response type expected by the client
|
20
|
+
:timeout => 300, # The default timeout for the request, also handled by client.rb
|
21
|
+
:client_host => nil, # The hostname or address of this client
|
22
|
+
:first_alive_load_balance => false, # Do we want to use check_avail frames before request
|
22
23
|
}
|
23
24
|
|
24
25
|
class Base
|
@@ -31,6 +32,11 @@ module Protobuf
|
|
31
32
|
@options = DEFAULT_OPTIONS.merge(options)
|
32
33
|
end
|
33
34
|
|
35
|
+
def first_alive_load_balance?
|
36
|
+
ENV.has_key?("PB_FIRST_ALIVE_LOAD_BALANCE") ||
|
37
|
+
options[:first_alive_load_balance]
|
38
|
+
end
|
39
|
+
|
34
40
|
def send_request
|
35
41
|
raise 'If you inherit a Connector from Base you must implement send_request'
|
36
42
|
end
|
@@ -64,14 +64,28 @@ module Protobuf
|
|
64
64
|
# service. The LINGER is set to 0 so we can close immediately in
|
65
65
|
# the event of a timeout
|
66
66
|
def create_socket
|
67
|
-
|
67
|
+
socket = nil
|
68
68
|
|
69
|
-
|
70
|
-
|
69
|
+
begin
|
70
|
+
server_uri = lookup_server_uri
|
71
|
+
|
72
|
+
socket = zmq_context.socket(::ZMQ::REQ)
|
73
|
+
socket.setsockopt(::ZMQ::LINGER, 0)
|
74
|
+
|
75
|
+
log_debug { sign_message("Establishing connection: #{server_uri}") }
|
76
|
+
zmq_error_check(socket.connect(server_uri), :socket_connect)
|
77
|
+
log_debug { sign_message("Connection established to #{server_uri}") }
|
71
78
|
|
72
|
-
|
73
|
-
|
74
|
-
|
79
|
+
if first_alive_load_balance?
|
80
|
+
check_available_response = ""
|
81
|
+
zmq_error_check(socket.send_string(::Protobuf::Rpc::Zmq::CHECK_AVAILABLE_MESSAGE), :socket_send_string)
|
82
|
+
zmq_error_check(socket.recv_string(check_available_response), :socket_recv_string)
|
83
|
+
|
84
|
+
if check_available_response == ::Protobuf::Rpc::Zmq::NO_WORKERS_AVAILABLE
|
85
|
+
zmq_error_check(socket.close, :socket_close)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end while socket.try(:socket).nil?
|
75
89
|
|
76
90
|
socket
|
77
91
|
end
|
@@ -87,7 +101,7 @@ module Protobuf
|
|
87
101
|
# to the host and port in the options
|
88
102
|
#
|
89
103
|
def lookup_server_uri
|
90
|
-
|
104
|
+
50.times do
|
91
105
|
service_directory.all_listings_for(service).each do |listing|
|
92
106
|
host = listing.try(:address)
|
93
107
|
port = listing.try(:port)
|
@@ -98,7 +112,7 @@ module Protobuf
|
|
98
112
|
port = options[:port]
|
99
113
|
return "tcp://#{host}:#{port}" if host_alive?(host)
|
100
114
|
|
101
|
-
sleep 1
|
115
|
+
sleep(1.0/10.0) # not sure why sleeping at all, but should be way less than 1 second
|
102
116
|
end
|
103
117
|
|
104
118
|
raise "Host not found for service #{service}"
|
@@ -86,9 +86,16 @@ module Protobuf
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def process_frontend
|
89
|
-
|
90
|
-
|
91
|
-
|
89
|
+
address, _, message, *frames = read_from_frontend
|
90
|
+
|
91
|
+
if message == ::Protobuf::Rpc::Zmq::CHECK_AVAILABLE_MESSAGE
|
92
|
+
if @idle_workers.any?
|
93
|
+
write_to_frontend([address, "", ::Protobuf::Rpc::Zmq::WORKERS_AVAILABLE])
|
94
|
+
else
|
95
|
+
write_to_frontend([address, "", ::Protobuf::Rpc::Zmq::NO_WORKERS_AVAILABLE])
|
96
|
+
end
|
97
|
+
else
|
98
|
+
write_to_backend([@idle_workers.shift, ""] + [address, "", message ] + frames)
|
92
99
|
end
|
93
100
|
end
|
94
101
|
|
@@ -6,6 +6,9 @@ module Protobuf
|
|
6
6
|
|
7
7
|
ADDRESS_MATCH = /\A\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/.freeze
|
8
8
|
WORKER_READY_MESSAGE = "\1"
|
9
|
+
CHECK_AVAILABLE_MESSAGE = "\3"
|
10
|
+
NO_WORKERS_AVAILABLE = "\4"
|
11
|
+
WORKERS_AVAILABLE = "\5"
|
9
12
|
|
10
13
|
module Util
|
11
14
|
include ::Protobuf::Logger::LogMethods
|
data/lib/protobuf/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protobuf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.
|
4
|
+
version: 3.0.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- BJ Neilsen
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2014-02-
|
14
|
+
date: 2014-02-24 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|