protobuf 2.8.0.beta5 → 2.8.0.beta6
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 +7 -0
- data/lib/protobuf/cli.rb +0 -1
- data/lib/protobuf/rpc/connectors/socket.rb +0 -1
- data/lib/protobuf/rpc/connectors/zmq.rb +51 -72
- data/lib/protobuf/rpc/servers/zmq/server.rb +1 -9
- data/lib/protobuf/rpc/servers/zmq_runner.rb +4 -0
- data/lib/protobuf/version.rb +1 -1
- metadata +33 -64
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8c1f25ffde20a579438083ec4b093a3b69e4df0e
|
4
|
+
data.tar.gz: 5745bab0fb469561800260865054a5996a358e54
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d7f10fcee632cfd3dd496feaf6860d1fcc756b0196e08848033ed9fce721a03d37d01eed9e171debb60dbc829793600dc09b7f614d414995b77c1fa784f926d5
|
7
|
+
data.tar.gz: d9099f622b4630c29273f287ca0eae438acc053533797b365fcbb1c5f303659439385fb3fff4a4887c6c4759036897da6e49780faf7ef3f26fcb55882a0f768c
|
data/lib/protobuf/cli.rb
CHANGED
@@ -29,7 +29,6 @@ module Protobuf
|
|
29
29
|
option :evented, :type => :boolean, :aliases => %w(-m), :desc => 'Evented Mode for server and client connections (uses EventMachine).'
|
30
30
|
option :zmq, :type => :boolean, :aliases => %w(-z), :desc => 'ZeroMQ Socket Mode for server and client connections.'
|
31
31
|
|
32
|
-
option :beacon_address, :type => :string, :desc => 'Broadcast beacons to this address (defaul: value of ServiceDirectory.address)'
|
33
32
|
option :beacon_interval, :type => :numeric, :desc => 'Broadcast beacons every N seconds. (default: 5)'
|
34
33
|
option :beacon_port, :type => :numeric, :desc => 'Broadcast beacons to this port (default: value of ServiceDirectory.port)'
|
35
34
|
option :broadcast_beacons, :type => :boolean, :desc => 'Broadcast beacons for dynamic discovery (Currently only available with ZeroMQ).'
|
@@ -6,6 +6,8 @@ module Protobuf
|
|
6
6
|
module Connectors
|
7
7
|
class Zmq < Base
|
8
8
|
|
9
|
+
RequestTimeout = Class.new(RuntimeError)
|
10
|
+
|
9
11
|
##
|
10
12
|
# Included Modules
|
11
13
|
#
|
@@ -23,7 +25,11 @@ module Protobuf
|
|
23
25
|
# Class Methods
|
24
26
|
#
|
25
27
|
def self.zmq_context
|
26
|
-
@
|
28
|
+
@zmq_contexts ||= Hash.new { |hash, key|
|
29
|
+
hash[key] = ZMQ::Context.new
|
30
|
+
}
|
31
|
+
|
32
|
+
@zmq_contexts[Process.pid]
|
27
33
|
end
|
28
34
|
|
29
35
|
##
|
@@ -37,9 +43,7 @@ module Protobuf
|
|
37
43
|
#
|
38
44
|
def send_request
|
39
45
|
setup_connection
|
40
|
-
|
41
|
-
ensure
|
42
|
-
close_connection
|
46
|
+
send_request_with_lazy_pirate
|
43
47
|
end
|
44
48
|
|
45
49
|
def log_signature
|
@@ -53,23 +57,23 @@ module Protobuf
|
|
53
57
|
#
|
54
58
|
|
55
59
|
def close_connection
|
56
|
-
|
60
|
+
# The socket is automatically closed after every request.
|
57
61
|
end
|
58
62
|
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
|
63
|
-
#
|
64
|
-
def connect_to_rpc_server
|
65
|
-
return if error?
|
66
|
-
|
63
|
+
# Create a socket connected to a server that can handle the current
|
64
|
+
# service. The LINGER is set to 0 so we can close immediately in
|
65
|
+
# the event of a timeout
|
66
|
+
def create_socket
|
67
67
|
server_uri = lookup_server_uri
|
68
|
-
|
68
|
+
|
69
|
+
socket = zmq_context.socket(::ZMQ::REQ)
|
69
70
|
socket.setsockopt(::ZMQ::LINGER, 0)
|
71
|
+
|
72
|
+
log_debug { sign_message("Establishing connection: #{server_uri}") }
|
70
73
|
zmq_error_check(socket.connect(server_uri), :socket_connect)
|
71
|
-
zmq_error_check(poller.register_readable(socket), :poller_register_readable)
|
72
74
|
log_debug { sign_message("Connection established to #{server_uri}") }
|
75
|
+
|
76
|
+
socket
|
73
77
|
end
|
74
78
|
|
75
79
|
# Method to determine error state, must be used with Connector API.
|
@@ -97,53 +101,44 @@ module Protobuf
|
|
97
101
|
# If we haven't received a legitimate response in the CLIENT_RETRIES number
|
98
102
|
# of retries, fail the request.
|
99
103
|
#
|
100
|
-
def
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
CLIENT_RETRIES.times do |n|
|
106
|
-
connect_to_rpc_server
|
107
|
-
log_debug { sign_message("Sending Request (attempt #{n + 1}, #{socket})") }
|
108
|
-
send_data
|
109
|
-
log_debug { sign_message("Request sending complete (attempt #{n + 1}, #{socket})") }
|
110
|
-
|
111
|
-
if poller.poll(poll_timeout) == 1
|
112
|
-
read_response
|
113
|
-
return
|
114
|
-
else
|
115
|
-
socket_close
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
fail(:RPC_FAILED, "The server took longer than #{options[:timeout]} seconds to respond")
|
120
|
-
end
|
104
|
+
def send_request_with_lazy_pirate
|
105
|
+
attempt = 0
|
106
|
+
timeout = options[:timeout].to_f
|
107
|
+
@stats.request_size = @request_data.size
|
121
108
|
|
122
|
-
|
123
|
-
|
109
|
+
begin
|
110
|
+
attempt += 1
|
111
|
+
send_request_with_timeout(timeout, attempt)
|
112
|
+
parse_response
|
113
|
+
rescue RequestTimeout
|
114
|
+
retry if attempt < CLIENT_RETRIES
|
115
|
+
fail(:RPC_FAILED, "The server repeatedly failed to respond within #{timeout} seconds")
|
116
|
+
rescue => e
|
117
|
+
fail(:RPC_FAILED, "Unexpected error sending request: #{e}")
|
118
|
+
end
|
124
119
|
end
|
125
120
|
|
126
|
-
|
127
|
-
|
128
|
-
# failed callbacks, depending on the state of the communication
|
129
|
-
# and response data.
|
130
|
-
#
|
131
|
-
def read_response
|
132
|
-
return if error?
|
133
|
-
|
134
|
-
@response_data = ''
|
135
|
-
zmq_error_check(socket.recv_string(@response_data), :socket_recv_string)
|
136
|
-
|
137
|
-
parse_response
|
138
|
-
end
|
121
|
+
def send_request_with_timeout(timeout, attempt = 0)
|
122
|
+
socket = create_socket
|
139
123
|
|
140
|
-
|
141
|
-
|
142
|
-
def send_data
|
143
|
-
return if error?
|
124
|
+
poller = ::ZMQ::Poller.new
|
125
|
+
poller.register_readable(socket)
|
144
126
|
|
145
|
-
|
127
|
+
log_debug { sign_message("Sending Request (attempt #{attempt}, #{socket})") }
|
146
128
|
zmq_error_check(socket.send_string(@request_data), :socket_send_string)
|
129
|
+
log_debug { sign_message("Waiting #{timeout} seconds for response (attempt #{attempt}, #{socket})") }
|
130
|
+
|
131
|
+
if poller.poll(timeout * 1000) == 1
|
132
|
+
zmq_error_check(socket.recv_string(@response_data = ""), :socket_recv_string)
|
133
|
+
log_debug { sign_message("Response received (attempt #{attempt}, #{socket})") }
|
134
|
+
else
|
135
|
+
log_debug { sign_message("Timed out waiting for response (attempt #{attempt}, #{socket})") }
|
136
|
+
raise RequestTimeout
|
137
|
+
end
|
138
|
+
ensure
|
139
|
+
log_debug { sign_message("Closing Socket") }
|
140
|
+
zmq_error_check(socket.close, :socket_close)
|
141
|
+
log_debug { sign_message("Socket closed") }
|
147
142
|
end
|
148
143
|
|
149
144
|
# The service we're attempting to connect to
|
@@ -157,21 +152,6 @@ module Protobuf
|
|
157
152
|
::Protobuf::Rpc::ServiceDirectory.instance
|
158
153
|
end
|
159
154
|
|
160
|
-
# Setup a ZMQ request socket in the current zmq context.
|
161
|
-
#
|
162
|
-
def socket
|
163
|
-
@socket ||= zmq_context.socket(::ZMQ::REQ)
|
164
|
-
end
|
165
|
-
|
166
|
-
def socket_close
|
167
|
-
if socket
|
168
|
-
log_debug { sign_message("Closing Socket") }
|
169
|
-
zmq_error_check(socket.close, :socket_close)
|
170
|
-
log_debug { sign_message("Socket closed") }
|
171
|
-
@socket = nil
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
155
|
# Return the ZMQ Context to use for this process.
|
176
156
|
# If the context does not exist, create it, then register
|
177
157
|
# an exit block to ensure the context is terminated correctly.
|
@@ -189,7 +169,6 @@ module Protobuf
|
|
189
169
|
ERROR
|
190
170
|
end
|
191
171
|
end
|
192
|
-
|
193
172
|
end
|
194
173
|
end
|
195
174
|
end
|
@@ -50,15 +50,7 @@ module Protobuf
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def beacon_ip
|
53
|
-
|
54
|
-
unless address = options[:beacon_address]
|
55
|
-
address = ::Protobuf::Rpc::ServiceDirectory.address
|
56
|
-
end
|
57
|
-
|
58
|
-
@beacon_ip = resolve_ip(address)
|
59
|
-
end
|
60
|
-
|
61
|
-
@beacon_ip
|
53
|
+
"255.255.255.255"
|
62
54
|
end
|
63
55
|
|
64
56
|
def beacon_port
|
data/lib/protobuf/version.rb
CHANGED
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protobuf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.8.0.
|
5
|
-
prerelease: 6
|
4
|
+
version: 2.8.0.beta6
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- BJ Neilsen
|
@@ -10,214 +9,188 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2013-
|
12
|
+
date: 2013-07-03 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: activesupport
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - '>='
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: '0'
|
23
21
|
type: :runtime
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
|
-
- -
|
25
|
+
- - '>='
|
29
26
|
- !ruby/object:Gem::Version
|
30
27
|
version: '0'
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
29
|
name: ffi
|
33
30
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
31
|
requirements:
|
36
|
-
- -
|
32
|
+
- - '>='
|
37
33
|
- !ruby/object:Gem::Version
|
38
34
|
version: '0'
|
39
35
|
type: :runtime
|
40
36
|
prerelease: false
|
41
37
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
38
|
requirements:
|
44
|
-
- -
|
39
|
+
- - '>='
|
45
40
|
- !ruby/object:Gem::Version
|
46
41
|
version: '0'
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
43
|
name: multi_json
|
49
44
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
45
|
requirements:
|
52
|
-
- -
|
46
|
+
- - '>='
|
53
47
|
- !ruby/object:Gem::Version
|
54
48
|
version: '0'
|
55
49
|
type: :runtime
|
56
50
|
prerelease: false
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
52
|
requirements:
|
60
|
-
- -
|
53
|
+
- - '>='
|
61
54
|
- !ruby/object:Gem::Version
|
62
55
|
version: '0'
|
63
56
|
- !ruby/object:Gem::Dependency
|
64
57
|
name: thor
|
65
58
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
59
|
requirements:
|
68
|
-
- -
|
60
|
+
- - '>='
|
69
61
|
- !ruby/object:Gem::Version
|
70
62
|
version: '0'
|
71
63
|
type: :runtime
|
72
64
|
prerelease: false
|
73
65
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
66
|
requirements:
|
76
|
-
- -
|
67
|
+
- - '>='
|
77
68
|
- !ruby/object:Gem::Version
|
78
69
|
version: '0'
|
79
70
|
- !ruby/object:Gem::Dependency
|
80
71
|
name: eventmachine
|
81
72
|
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
73
|
requirements:
|
84
|
-
- -
|
74
|
+
- - '>='
|
85
75
|
- !ruby/object:Gem::Version
|
86
76
|
version: '0'
|
87
77
|
type: :development
|
88
78
|
prerelease: false
|
89
79
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
80
|
requirements:
|
92
|
-
- -
|
81
|
+
- - '>='
|
93
82
|
- !ruby/object:Gem::Version
|
94
83
|
version: '0'
|
95
84
|
- !ruby/object:Gem::Dependency
|
96
85
|
name: ffi-rzmq
|
97
86
|
requirement: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
87
|
requirements:
|
100
|
-
- -
|
88
|
+
- - '>='
|
101
89
|
- !ruby/object:Gem::Version
|
102
90
|
version: '0'
|
103
91
|
type: :development
|
104
92
|
prerelease: false
|
105
93
|
version_requirements: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
94
|
requirements:
|
108
|
-
- -
|
95
|
+
- - '>='
|
109
96
|
- !ruby/object:Gem::Version
|
110
97
|
version: '0'
|
111
98
|
- !ruby/object:Gem::Dependency
|
112
99
|
name: pry
|
113
100
|
requirement: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
101
|
requirements:
|
116
|
-
- -
|
102
|
+
- - '>='
|
117
103
|
- !ruby/object:Gem::Version
|
118
104
|
version: '0'
|
119
105
|
type: :development
|
120
106
|
prerelease: false
|
121
107
|
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
none: false
|
123
108
|
requirements:
|
124
|
-
- -
|
109
|
+
- - '>='
|
125
110
|
- !ruby/object:Gem::Version
|
126
111
|
version: '0'
|
127
112
|
- !ruby/object:Gem::Dependency
|
128
113
|
name: pry-nav
|
129
114
|
requirement: !ruby/object:Gem::Requirement
|
130
|
-
none: false
|
131
115
|
requirements:
|
132
|
-
- -
|
116
|
+
- - '>='
|
133
117
|
- !ruby/object:Gem::Version
|
134
118
|
version: '0'
|
135
119
|
type: :development
|
136
120
|
prerelease: false
|
137
121
|
version_requirements: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
122
|
requirements:
|
140
|
-
- -
|
123
|
+
- - '>='
|
141
124
|
- !ruby/object:Gem::Version
|
142
125
|
version: '0'
|
143
126
|
- !ruby/object:Gem::Dependency
|
144
127
|
name: rake
|
145
128
|
requirement: !ruby/object:Gem::Requirement
|
146
|
-
none: false
|
147
129
|
requirements:
|
148
|
-
- -
|
130
|
+
- - '>='
|
149
131
|
- !ruby/object:Gem::Version
|
150
132
|
version: '0'
|
151
133
|
type: :development
|
152
134
|
prerelease: false
|
153
135
|
version_requirements: !ruby/object:Gem::Requirement
|
154
|
-
none: false
|
155
136
|
requirements:
|
156
|
-
- -
|
137
|
+
- - '>='
|
157
138
|
- !ruby/object:Gem::Version
|
158
139
|
version: '0'
|
159
140
|
- !ruby/object:Gem::Dependency
|
160
141
|
name: rake-compiler
|
161
142
|
requirement: !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
143
|
requirements:
|
164
|
-
- -
|
144
|
+
- - '>='
|
165
145
|
- !ruby/object:Gem::Version
|
166
146
|
version: '0'
|
167
147
|
type: :development
|
168
148
|
prerelease: false
|
169
149
|
version_requirements: !ruby/object:Gem::Requirement
|
170
|
-
none: false
|
171
150
|
requirements:
|
172
|
-
- -
|
151
|
+
- - '>='
|
173
152
|
- !ruby/object:Gem::Version
|
174
153
|
version: '0'
|
175
154
|
- !ruby/object:Gem::Dependency
|
176
155
|
name: rspec
|
177
156
|
requirement: !ruby/object:Gem::Requirement
|
178
|
-
none: false
|
179
157
|
requirements:
|
180
|
-
- -
|
158
|
+
- - '>='
|
181
159
|
- !ruby/object:Gem::Version
|
182
160
|
version: '0'
|
183
161
|
type: :development
|
184
162
|
prerelease: false
|
185
163
|
version_requirements: !ruby/object:Gem::Requirement
|
186
|
-
none: false
|
187
164
|
requirements:
|
188
|
-
- -
|
165
|
+
- - '>='
|
189
166
|
- !ruby/object:Gem::Version
|
190
167
|
version: '0'
|
191
168
|
- !ruby/object:Gem::Dependency
|
192
169
|
name: simplecov
|
193
170
|
requirement: !ruby/object:Gem::Requirement
|
194
|
-
none: false
|
195
171
|
requirements:
|
196
|
-
- -
|
172
|
+
- - '>='
|
197
173
|
- !ruby/object:Gem::Version
|
198
174
|
version: '0'
|
199
175
|
type: :development
|
200
176
|
prerelease: false
|
201
177
|
version_requirements: !ruby/object:Gem::Requirement
|
202
|
-
none: false
|
203
178
|
requirements:
|
204
|
-
- -
|
179
|
+
- - '>='
|
205
180
|
- !ruby/object:Gem::Version
|
206
181
|
version: '0'
|
207
182
|
- !ruby/object:Gem::Dependency
|
208
183
|
name: yard
|
209
184
|
requirement: !ruby/object:Gem::Requirement
|
210
|
-
none: false
|
211
185
|
requirements:
|
212
|
-
- -
|
186
|
+
- - '>='
|
213
187
|
- !ruby/object:Gem::Version
|
214
188
|
version: '0'
|
215
189
|
type: :development
|
216
190
|
prerelease: false
|
217
191
|
version_requirements: !ruby/object:Gem::Requirement
|
218
|
-
none: false
|
219
192
|
requirements:
|
220
|
-
- -
|
193
|
+
- - '>='
|
221
194
|
- !ruby/object:Gem::Version
|
222
195
|
version: '0'
|
223
196
|
description: Google Protocol Buffers v2.4.1 Serialization and RPC implementation for
|
@@ -495,30 +468,26 @@ files:
|
|
495
468
|
- test/test_types.rb
|
496
469
|
homepage: https://github.com/localshred/protobuf
|
497
470
|
licenses: []
|
471
|
+
metadata: {}
|
498
472
|
post_install_message:
|
499
473
|
rdoc_options: []
|
500
474
|
require_paths:
|
501
475
|
- lib
|
502
476
|
required_ruby_version: !ruby/object:Gem::Requirement
|
503
|
-
none: false
|
504
477
|
requirements:
|
505
|
-
- -
|
478
|
+
- - '>='
|
506
479
|
- !ruby/object:Gem::Version
|
507
480
|
version: '0'
|
508
|
-
segments:
|
509
|
-
- 0
|
510
|
-
hash: -2179465812601701045
|
511
481
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
512
|
-
none: false
|
513
482
|
requirements:
|
514
|
-
- -
|
483
|
+
- - '>'
|
515
484
|
- !ruby/object:Gem::Version
|
516
485
|
version: 1.3.1
|
517
486
|
requirements: []
|
518
487
|
rubyforge_project:
|
519
|
-
rubygems_version:
|
488
|
+
rubygems_version: 2.0.2
|
520
489
|
signing_key:
|
521
|
-
specification_version:
|
490
|
+
specification_version: 4
|
522
491
|
summary: Google Protocol Buffers v2.4.1 Serialization and RPC implementation for Ruby.
|
523
492
|
test_files:
|
524
493
|
- spec/benchmark/tasks.rb
|