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 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: