protobuf 3.3.2 → 3.3.3
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|