protobuf 3.3.2 → 3.3.3
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/LICENSE.txt +17 -9
- data/lib/protobuf/rpc/connectors/zmq.rb +24 -1
- data/lib/protobuf/rpc/servers/zmq/broker.rb +10 -19
- data/lib/protobuf/rpc/servers/zmq/util.rb +1 -0
- data/lib/protobuf/rpc/servers/zmq/worker.rb +2 -2
- data/lib/protobuf/rpc/service_directory.rb +1 -1
- data/lib/protobuf/version.rb +1 -1
- data/protobuf.gemspec +2 -1
- metadata +47 -63
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fe61fc4d47ed6c201b9236f073587ef838d0c02f
|
4
|
+
data.tar.gz: 39e557ae7adcad48d9ba1f21612b8cc233845b61
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b4720d9276e63dc31920f46eab1753aa57eaae8680c5745976866a8424541ab010fc9c3e1ac128b49ee8681bc71ff23b5869e0ef3d0d5c7234a3408688eb5fd0
|
7
|
+
data.tar.gz: cfd4db44b90c1dc3b2ae9dad0d2b303e00123ece4618534c13a1d1a90f078cb3003340073ee5ee7546d70de4701148de2a4b6416e551df3d93f85c7439d574fa
|
data/LICENSE.txt
CHANGED
@@ -1,14 +1,22 @@
|
|
1
|
-
|
2
|
-
Version 2, December 2004
|
1
|
+
The MIT License (MIT)
|
3
2
|
|
4
|
-
Copyright (
|
3
|
+
Copyright (c) 2014 BJ Neilsen
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
12
14
|
|
13
|
-
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
14
22
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'thread_safe'
|
1
2
|
require 'protobuf/rpc/connectors/base'
|
2
3
|
require 'protobuf/rpc/service_directory'
|
3
4
|
|
@@ -30,6 +31,10 @@ module Protobuf
|
|
30
31
|
@zmq_contexts[Process.pid]
|
31
32
|
end
|
32
33
|
|
34
|
+
def self.ping_port_responses
|
35
|
+
@ping_port_responses ||= ::ThreadSafe::Cache.new
|
36
|
+
end
|
37
|
+
|
33
38
|
##
|
34
39
|
# Instance methods
|
35
40
|
#
|
@@ -105,7 +110,7 @@ module Protobuf
|
|
105
110
|
# to the host and port in the options
|
106
111
|
#
|
107
112
|
def lookup_server_uri
|
108
|
-
|
113
|
+
15.times do
|
109
114
|
service_directory.all_listings_for(service).each do |listing|
|
110
115
|
host = listing.try(:address)
|
111
116
|
port = listing.try(:port)
|
@@ -115,6 +120,8 @@ module Protobuf
|
|
115
120
|
host = options[:host]
|
116
121
|
port = options[:port]
|
117
122
|
return "tcp://#{host}:#{port}" if host_alive?(host)
|
123
|
+
|
124
|
+
sleep (5.0/100.0)
|
118
125
|
end
|
119
126
|
|
120
127
|
raise "Host not found for service #{service}"
|
@@ -122,6 +129,22 @@ module Protobuf
|
|
122
129
|
|
123
130
|
def host_alive?(host)
|
124
131
|
return true unless ping_port_enabled?
|
132
|
+
|
133
|
+
if (last_response = self.class.ping_port_responses[host])
|
134
|
+
if (Time.now.to_i - last_response[:at]) <= 2
|
135
|
+
return last_response[:ping_port_open]
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
ping_port_open = ping_port_open?(host)
|
140
|
+
self.class.ping_port_responses[host] = {
|
141
|
+
:at => Time.now.to_i,
|
142
|
+
:ping_port_open => ping_port_open
|
143
|
+
}
|
144
|
+
ping_port_open
|
145
|
+
end
|
146
|
+
|
147
|
+
def ping_port_open?(host)
|
125
148
|
socket = TCPSocket.new(host, ping_port.to_i)
|
126
149
|
socket.setsockopt(::Socket::IPPROTO_TCP, ::Socket::TCP_NODELAY, 1)
|
127
150
|
socket.setsockopt(::Socket::SOL_SOCKET, ::Socket::SO_LINGER, [1,0].pack('ii'))
|
@@ -25,26 +25,17 @@ module Protobuf
|
|
25
25
|
@idle_workers = []
|
26
26
|
|
27
27
|
loop do
|
28
|
-
|
29
|
-
process_local_queue
|
30
|
-
end
|
31
|
-
|
28
|
+
process_local_queue
|
32
29
|
rc = @poller.poll(500)
|
33
30
|
|
34
31
|
# The server was shutdown and no requests are pending
|
35
32
|
break if rc == 0 && !running?
|
36
|
-
|
37
33
|
# Something went wrong
|
38
34
|
break if rc == -1
|
39
35
|
|
40
|
-
@poller.readables.
|
41
|
-
|
42
|
-
|
43
|
-
process_frontend
|
44
|
-
when @backend_socket
|
45
|
-
process_backend
|
46
|
-
end
|
47
|
-
end
|
36
|
+
process_backend if @poller.readables.include?(@backend_socket)
|
37
|
+
process_local_queue # Fair ordering so queued requests get in before new requests
|
38
|
+
process_frontend if @poller.readables.include?(@frontend_socket)
|
48
39
|
end
|
49
40
|
ensure
|
50
41
|
teardown
|
@@ -107,15 +98,15 @@ module Protobuf
|
|
107
98
|
|
108
99
|
if message == ::Protobuf::Rpc::Zmq::CHECK_AVAILABLE_MESSAGE
|
109
100
|
if local_queue.size < local_queue_max_size
|
110
|
-
write_to_frontend([address,
|
101
|
+
write_to_frontend([address, ::Protobuf::Rpc::Zmq::EMPTY_STRING, ::Protobuf::Rpc::Zmq::WORKERS_AVAILABLE])
|
111
102
|
else
|
112
|
-
write_to_frontend([address,
|
103
|
+
write_to_frontend([address, ::Protobuf::Rpc::Zmq::EMPTY_STRING, ::Protobuf::Rpc::Zmq::NO_WORKERS_AVAILABLE])
|
113
104
|
end
|
114
105
|
else
|
115
106
|
if @idle_workers.empty?
|
116
|
-
local_queue
|
107
|
+
local_queue << [address, ::Protobuf::Rpc::Zmq::EMPTY_STRING, message ].concat(frames)
|
117
108
|
else
|
118
|
-
write_to_backend([@idle_workers.shift,
|
109
|
+
write_to_backend([@idle_workers.shift, ::Protobuf::Rpc::Zmq::EMPTY_STRING].concat([address, ::Protobuf::Rpc::Zmq::EMPTY_STRING, message ]).concat(frames))
|
119
110
|
end
|
120
111
|
end
|
121
112
|
end
|
@@ -124,7 +115,7 @@ module Protobuf
|
|
124
115
|
return if local_queue.empty?
|
125
116
|
return if @idle_workers.empty?
|
126
117
|
|
127
|
-
write_to_backend([@idle_workers.shift,
|
118
|
+
write_to_backend([@idle_workers.shift, ::Protobuf::Rpc::Zmq::EMPTY_STRING].concat(local_queue.shift))
|
128
119
|
process_local_queue
|
129
120
|
end
|
130
121
|
|
@@ -143,7 +134,7 @@ module Protobuf
|
|
143
134
|
def teardown
|
144
135
|
@frontend_socket.try(:close)
|
145
136
|
@backend_socket.try(:close)
|
146
|
-
@zmq_context.try(:terminate)
|
137
|
+
@zmq_context.try(:terminate) unless inproc?
|
147
138
|
end
|
148
139
|
|
149
140
|
def write_to_backend(frames)
|
@@ -31,7 +31,7 @@ module Protobuf
|
|
31
31
|
|
32
32
|
gc_pause do
|
33
33
|
encoded_response = handle_request(data)
|
34
|
-
write_to_backend([client_address,
|
34
|
+
write_to_backend([client_address, ::Protobuf::Rpc::Zmq::EMPTY_STRING, encoded_response])
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
@@ -93,7 +93,7 @@ module Protobuf
|
|
93
93
|
|
94
94
|
def teardown
|
95
95
|
@backend_socket.try(:close)
|
96
|
-
@zmq_context.try(:terminate)
|
96
|
+
@zmq_context.try(:terminate) unless inproc?
|
97
97
|
end
|
98
98
|
|
99
99
|
def write_to_backend(frames)
|
data/lib/protobuf/version.rb
CHANGED
data/protobuf.gemspec
CHANGED
@@ -6,7 +6,7 @@ require "protobuf/version"
|
|
6
6
|
s.name = 'protobuf'
|
7
7
|
s.version = ::Protobuf::VERSION
|
8
8
|
s.date = ::Time.now.strftime('%Y-%m-%d')
|
9
|
-
s.license = '
|
9
|
+
s.license = 'MIT'
|
10
10
|
|
11
11
|
s.authors = ['BJ Neilsen', 'Brandon Dewitt', 'Devin Christensen', 'Adam Hutchison']
|
12
12
|
s.email = ['bj.neilsen+protobuf@gmail.com', 'brandonsdewitt+protobuf@gmail.com', 'quixoten@gmail.com', 'liveh2o@gmail.com']
|
@@ -22,6 +22,7 @@ require "protobuf/version"
|
|
22
22
|
s.add_dependency 'activesupport', '>= 3.2'
|
23
23
|
s.add_dependency 'middleware'
|
24
24
|
s.add_dependency 'thor'
|
25
|
+
s.add_dependency 'thread_safe'
|
25
26
|
|
26
27
|
s.add_development_dependency 'ffi-rzmq'
|
27
28
|
s.add_development_dependency 'pry-nav'
|
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: 3.3.
|
5
|
-
prerelease:
|
4
|
+
version: 3.3.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- BJ Neilsen
|
@@ -12,182 +11,174 @@ authors:
|
|
12
11
|
autorequire:
|
13
12
|
bindir: bin
|
14
13
|
cert_chain: []
|
15
|
-
date: 2014-
|
14
|
+
date: 2014-09-13 00:00:00.000000000 Z
|
16
15
|
dependencies:
|
17
16
|
- !ruby/object:Gem::Dependency
|
18
17
|
name: activesupport
|
19
18
|
requirement: !ruby/object:Gem::Requirement
|
20
|
-
none: false
|
21
19
|
requirements:
|
22
|
-
- -
|
20
|
+
- - ">="
|
23
21
|
- !ruby/object:Gem::Version
|
24
22
|
version: '3.2'
|
25
23
|
type: :runtime
|
26
24
|
prerelease: false
|
27
25
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
26
|
requirements:
|
30
|
-
- -
|
27
|
+
- - ">="
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: '3.2'
|
33
30
|
- !ruby/object:Gem::Dependency
|
34
31
|
name: middleware
|
35
32
|
requirement: !ruby/object:Gem::Requirement
|
36
|
-
none: false
|
37
33
|
requirements:
|
38
|
-
- -
|
34
|
+
- - ">="
|
39
35
|
- !ruby/object:Gem::Version
|
40
36
|
version: '0'
|
41
37
|
type: :runtime
|
42
38
|
prerelease: false
|
43
39
|
version_requirements: !ruby/object:Gem::Requirement
|
44
|
-
none: false
|
45
40
|
requirements:
|
46
|
-
- -
|
41
|
+
- - ">="
|
47
42
|
- !ruby/object:Gem::Version
|
48
43
|
version: '0'
|
49
44
|
- !ruby/object:Gem::Dependency
|
50
45
|
name: thor
|
51
46
|
requirement: !ruby/object:Gem::Requirement
|
52
|
-
none: false
|
53
47
|
requirements:
|
54
|
-
- -
|
48
|
+
- - ">="
|
55
49
|
- !ruby/object:Gem::Version
|
56
50
|
version: '0'
|
57
51
|
type: :runtime
|
58
52
|
prerelease: false
|
59
53
|
version_requirements: !ruby/object:Gem::Requirement
|
60
|
-
none: false
|
61
54
|
requirements:
|
62
|
-
- -
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: thread_safe
|
60
|
+
requirement: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
type: :runtime
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
63
70
|
- !ruby/object:Gem::Version
|
64
71
|
version: '0'
|
65
72
|
- !ruby/object:Gem::Dependency
|
66
73
|
name: ffi-rzmq
|
67
74
|
requirement: !ruby/object:Gem::Requirement
|
68
|
-
none: false
|
69
75
|
requirements:
|
70
|
-
- -
|
76
|
+
- - ">="
|
71
77
|
- !ruby/object:Gem::Version
|
72
78
|
version: '0'
|
73
79
|
type: :development
|
74
80
|
prerelease: false
|
75
81
|
version_requirements: !ruby/object:Gem::Requirement
|
76
|
-
none: false
|
77
82
|
requirements:
|
78
|
-
- -
|
83
|
+
- - ">="
|
79
84
|
- !ruby/object:Gem::Version
|
80
85
|
version: '0'
|
81
86
|
- !ruby/object:Gem::Dependency
|
82
87
|
name: pry-nav
|
83
88
|
requirement: !ruby/object:Gem::Requirement
|
84
|
-
none: false
|
85
89
|
requirements:
|
86
|
-
- -
|
90
|
+
- - ">="
|
87
91
|
- !ruby/object:Gem::Version
|
88
92
|
version: '0'
|
89
93
|
type: :development
|
90
94
|
prerelease: false
|
91
95
|
version_requirements: !ruby/object:Gem::Requirement
|
92
|
-
none: false
|
93
96
|
requirements:
|
94
|
-
- -
|
97
|
+
- - ">="
|
95
98
|
- !ruby/object:Gem::Version
|
96
99
|
version: '0'
|
97
100
|
- !ruby/object:Gem::Dependency
|
98
101
|
name: rake
|
99
102
|
requirement: !ruby/object:Gem::Requirement
|
100
|
-
none: false
|
101
103
|
requirements:
|
102
|
-
- -
|
104
|
+
- - ">="
|
103
105
|
- !ruby/object:Gem::Version
|
104
106
|
version: '0'
|
105
107
|
type: :development
|
106
108
|
prerelease: false
|
107
109
|
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
none: false
|
109
110
|
requirements:
|
110
|
-
- -
|
111
|
+
- - ">="
|
111
112
|
- !ruby/object:Gem::Version
|
112
113
|
version: '0'
|
113
114
|
- !ruby/object:Gem::Dependency
|
114
115
|
name: rspec
|
115
116
|
requirement: !ruby/object:Gem::Requirement
|
116
|
-
none: false
|
117
117
|
requirements:
|
118
|
-
- -
|
118
|
+
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
120
|
version: '3.0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
123
|
version_requirements: !ruby/object:Gem::Requirement
|
124
|
-
none: false
|
125
124
|
requirements:
|
126
|
-
- -
|
125
|
+
- - ">="
|
127
126
|
- !ruby/object:Gem::Version
|
128
127
|
version: '3.0'
|
129
128
|
- !ruby/object:Gem::Dependency
|
130
129
|
name: simplecov
|
131
130
|
requirement: !ruby/object:Gem::Requirement
|
132
|
-
none: false
|
133
131
|
requirements:
|
134
|
-
- -
|
132
|
+
- - ">="
|
135
133
|
- !ruby/object:Gem::Version
|
136
134
|
version: '0'
|
137
135
|
type: :development
|
138
136
|
prerelease: false
|
139
137
|
version_requirements: !ruby/object:Gem::Requirement
|
140
|
-
none: false
|
141
138
|
requirements:
|
142
|
-
- -
|
139
|
+
- - ">="
|
143
140
|
- !ruby/object:Gem::Version
|
144
141
|
version: '0'
|
145
142
|
- !ruby/object:Gem::Dependency
|
146
143
|
name: yard
|
147
144
|
requirement: !ruby/object:Gem::Requirement
|
148
|
-
none: false
|
149
145
|
requirements:
|
150
|
-
- -
|
146
|
+
- - ">="
|
151
147
|
- !ruby/object:Gem::Version
|
152
148
|
version: '0'
|
153
149
|
type: :development
|
154
150
|
prerelease: false
|
155
151
|
version_requirements: !ruby/object:Gem::Requirement
|
156
|
-
none: false
|
157
152
|
requirements:
|
158
|
-
- -
|
153
|
+
- - ">="
|
159
154
|
- !ruby/object:Gem::Version
|
160
155
|
version: '0'
|
161
156
|
- !ruby/object:Gem::Dependency
|
162
157
|
name: timecop
|
163
158
|
requirement: !ruby/object:Gem::Requirement
|
164
|
-
none: false
|
165
159
|
requirements:
|
166
|
-
- -
|
160
|
+
- - ">="
|
167
161
|
- !ruby/object:Gem::Version
|
168
162
|
version: '0'
|
169
163
|
type: :development
|
170
164
|
prerelease: false
|
171
165
|
version_requirements: !ruby/object:Gem::Requirement
|
172
|
-
none: false
|
173
166
|
requirements:
|
174
|
-
- -
|
167
|
+
- - ">="
|
175
168
|
- !ruby/object:Gem::Version
|
176
169
|
version: '0'
|
177
170
|
- !ruby/object:Gem::Dependency
|
178
171
|
name: perftools.rb
|
179
172
|
requirement: !ruby/object:Gem::Requirement
|
180
|
-
none: false
|
181
173
|
requirements:
|
182
|
-
- -
|
174
|
+
- - ">="
|
183
175
|
- !ruby/object:Gem::Version
|
184
176
|
version: '0'
|
185
177
|
type: :development
|
186
178
|
prerelease: false
|
187
179
|
version_requirements: !ruby/object:Gem::Requirement
|
188
|
-
none: false
|
189
180
|
requirements:
|
190
|
-
- -
|
181
|
+
- - ">="
|
191
182
|
- !ruby/object:Gem::Version
|
192
183
|
version: '0'
|
193
184
|
description: Google Protocol Buffers serialization and RPC implementation for Ruby.
|
@@ -202,9 +193,9 @@ executables:
|
|
202
193
|
extensions: []
|
203
194
|
extra_rdoc_files: []
|
204
195
|
files:
|
205
|
-
- .gitignore
|
206
|
-
- .travis.yml
|
207
|
-
- .yardopts
|
196
|
+
- ".gitignore"
|
197
|
+
- ".travis.yml"
|
198
|
+
- ".yardopts"
|
208
199
|
- CHANGES.md
|
209
200
|
- CONTRIBUTING.md
|
210
201
|
- Gemfile
|
@@ -378,34 +369,27 @@ files:
|
|
378
369
|
- spec/support/test_app_file.rb
|
379
370
|
homepage: https://github.com/localshred/protobuf
|
380
371
|
licenses:
|
381
|
-
-
|
372
|
+
- MIT
|
373
|
+
metadata: {}
|
382
374
|
post_install_message:
|
383
375
|
rdoc_options: []
|
384
376
|
require_paths:
|
385
377
|
- lib
|
386
378
|
required_ruby_version: !ruby/object:Gem::Requirement
|
387
|
-
none: false
|
388
379
|
requirements:
|
389
|
-
- -
|
380
|
+
- - ">="
|
390
381
|
- !ruby/object:Gem::Version
|
391
382
|
version: '0'
|
392
|
-
segments:
|
393
|
-
- 0
|
394
|
-
hash: 4403086783041051499
|
395
383
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
396
|
-
none: false
|
397
384
|
requirements:
|
398
|
-
- -
|
385
|
+
- - ">="
|
399
386
|
- !ruby/object:Gem::Version
|
400
387
|
version: '0'
|
401
|
-
segments:
|
402
|
-
- 0
|
403
|
-
hash: 4403086783041051499
|
404
388
|
requirements: []
|
405
389
|
rubyforge_project:
|
406
|
-
rubygems_version:
|
390
|
+
rubygems_version: 2.2.2
|
407
391
|
signing_key:
|
408
|
-
specification_version:
|
392
|
+
specification_version: 4
|
409
393
|
summary: Google Protocol Buffers serialization and RPC implementation for Ruby.
|
410
394
|
test_files: []
|
411
395
|
has_rdoc:
|