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 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
- DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2
- Version 2, December 2004
1
+ The MIT License (MIT)
3
2
 
4
- Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
3
+ Copyright (c) 2014 BJ Neilsen
5
4
 
6
- Everyone is permitted to copy and distribute verbatim or modified
7
- copies of this license document, and changing it is allowed as long
8
- as the name is changed.
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
- DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
11
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
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
- 0. You just DO WHAT THE FUCK YOU WANT TO.
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
- 5.times do
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
- unless local_queue.empty?
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.each do |readable|
41
- case readable
42
- when @frontend_socket
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, "", ::Protobuf::Rpc::Zmq::WORKERS_AVAILABLE])
101
+ write_to_frontend([address, ::Protobuf::Rpc::Zmq::EMPTY_STRING, ::Protobuf::Rpc::Zmq::WORKERS_AVAILABLE])
111
102
  else
112
- write_to_frontend([address, "", ::Protobuf::Rpc::Zmq::NO_WORKERS_AVAILABLE])
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.push([address, "", message ] + frames)
107
+ local_queue << [address, ::Protobuf::Rpc::Zmq::EMPTY_STRING, message ].concat(frames)
117
108
  else
118
- write_to_backend([@idle_workers.shift, ""] + [address, "", message ] + frames)
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, ""] + local_queue.pop)
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)
@@ -9,6 +9,7 @@ module Protobuf
9
9
  CHECK_AVAILABLE_MESSAGE = "\3"
10
10
  NO_WORKERS_AVAILABLE = "\4"
11
11
  WORKERS_AVAILABLE = "\5"
12
+ EMPTY_STRING = ""
12
13
 
13
14
  module Util
14
15
  include ::Protobuf::Logging
@@ -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, "", encoded_response])
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)
@@ -219,7 +219,7 @@ module Protobuf
219
219
  end
220
220
 
221
221
  def run
222
- sweep_interval = 1 # sweep expired listings every 1 second
222
+ sweep_interval = 5 # sweep expired listings every 5 seconds
223
223
  next_sweep = Time.now.to_i + sweep_interval
224
224
 
225
225
  loop do
@@ -1,3 +1,3 @@
1
1
  module Protobuf
2
- VERSION = '3.3.2'
2
+ VERSION = '3.3.3'
3
3
  end
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 = 'WTFPL'
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.2
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-08-27 00:00:00.000000000 Z
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
- - WTFPL
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: 1.8.24
390
+ rubygems_version: 2.2.2
407
391
  signing_key:
408
- specification_version: 3
392
+ specification_version: 4
409
393
  summary: Google Protocol Buffers serialization and RPC implementation for Ruby.
410
394
  test_files: []
411
395
  has_rdoc: