protobuf 3.0.1 → 3.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 53cdf77e2265a06c69501d39f521807dfc6612cf
4
- data.tar.gz: 7312c52a61ba96d35cae01be21250d417c4b72fb
3
+ metadata.gz: 9f6c3acaf286282c387182a22e85ed017b07689e
4
+ data.tar.gz: dfbd232feef940d2fe05f7c2985437c853c2b4c0
5
5
  SHA512:
6
- metadata.gz: ec453a6e9a3702229c4f5f2fcdb4ee49d54c67713ca4b3b30d08201e4e93957446d12d9b6cd4fa59ac14e6e8a0e5ca52d21264f7a2df8b235fb51b5ba6a714ea
7
- data.tar.gz: f1c900b5a393eaa9141ccd18c139d310f175ce5b28f152fe318b042e90c4f8c2a2b6abc12544afa4e0a297d956ed5cd36bc1ccb861e0d8465eae741a5bb9646a
6
+ metadata.gz: 4016076f1cb790f97ac9587cc94785fd896e6c9487a3f5a6ab38548648eb9388a90ad76d00dc94b1bee02691b384d98e8dbd16561b559d66311ded536a5afa3f
7
+ data.tar.gz: be1ec665261e4673fef18d6880719cfa7e629cc9ba628fd49527f720b0774cd11012cae1620b2f40ad3601aeedf7efc601b97331fe34016fb749b691922a558a
data/CHANGES.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Stable (3.x)
2
2
 
3
+ 3.0.2
4
+ ---------
5
+
6
+ - Queue requests at the broker when concurrent requests hit the ZMQ server, distribute to
7
+ worker threads on each turn of the read poll loop. [#189, @abrandoned, @liveh2o]
8
+
3
9
  3.0.1
4
10
  ---------
5
11
 
@@ -1,13 +1,18 @@
1
+ require 'thread'
2
+
1
3
  module Protobuf
2
4
  module Rpc
3
5
  module Zmq
4
6
  class Broker
5
7
  include ::Protobuf::Rpc::Zmq::Util
6
8
 
9
+ attr_reader :local_queue
10
+
7
11
  def initialize(server)
8
12
  @server = server
9
13
 
10
14
  init_zmq_context
15
+ init_local_queue
11
16
  init_backend_socket
12
17
  init_frontend_socket
13
18
  init_poller
@@ -20,6 +25,10 @@ module Protobuf
20
25
  @idle_workers = []
21
26
 
22
27
  loop do
28
+ unless local_queue.empty?
29
+ process_local_queue
30
+ end
31
+
23
32
  rc = @poller.poll(500)
24
33
 
25
34
  # The server was shutdown and no requests are pending
@@ -57,6 +66,10 @@ module Protobuf
57
66
  zmq_error_check(@frontend_socket.bind(@server.frontend_uri))
58
67
  end
59
68
 
69
+ def init_local_queue
70
+ @local_queue = ::Queue.new
71
+ end
72
+
60
73
  def init_poller
61
74
  @poller = ZMQ::Poller.new
62
75
  @poller.register_readable(@frontend_socket)
@@ -89,16 +102,28 @@ module Protobuf
89
102
  address, _, message, *frames = read_from_frontend
90
103
 
91
104
  if message == ::Protobuf::Rpc::Zmq::CHECK_AVAILABLE_MESSAGE
92
- if @idle_workers.any?
105
+ if @idle_workers.any? || local_queue.empty?
93
106
  write_to_frontend([address, "", ::Protobuf::Rpc::Zmq::WORKERS_AVAILABLE])
94
107
  else
95
108
  write_to_frontend([address, "", ::Protobuf::Rpc::Zmq::NO_WORKERS_AVAILABLE])
96
109
  end
97
110
  else
98
- write_to_backend([@idle_workers.shift, ""] + [address, "", message ] + frames)
111
+ if @idle_workers.any?
112
+ write_to_backend([@idle_workers.shift, ""] + [address, "", message ] + frames)
113
+ else
114
+ local_queue.push([address, "", message ] + frames)
115
+ end
99
116
  end
100
117
  end
101
118
 
119
+ def process_local_queue
120
+ return if local_queue.empty?
121
+ return if @idle_workers.empty?
122
+
123
+ write_to_backend([@idle_workers.shift, ""] + local_queue.pop)
124
+ process_local_queue
125
+ end
126
+
102
127
  def read_from_backend
103
128
  frames = []
104
129
  zmq_error_check(@backend_socket.recv_strings(frames))
@@ -1,3 +1,3 @@
1
1
  module Protobuf
2
- VERSION = '3.0.1'
2
+ VERSION = '3.0.2'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protobuf
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - BJ Neilsen
@@ -11,174 +11,174 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2014-02-26 00:00:00.000000000 Z
14
+ date: 2014-03-04 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - '>='
20
+ - - ">="
21
21
  - !ruby/object:Gem::Version
22
22
  version: '3.2'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - '>='
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
29
  version: '3.2'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: middleware
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - '>='
34
+ - - ">="
35
35
  - !ruby/object:Gem::Version
36
36
  version: '0'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - '>='
41
+ - - ">="
42
42
  - !ruby/object:Gem::Version
43
43
  version: '0'
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: multi_json
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
- - - '>='
48
+ - - ">="
49
49
  - !ruby/object:Gem::Version
50
50
  version: '0'
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - '>='
55
+ - - ">="
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: thor
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
- - - '>='
62
+ - - ">="
63
63
  - !ruby/object:Gem::Version
64
64
  version: '0'
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - '>='
69
+ - - ">="
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: ffi-rzmq
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
- - - '>='
76
+ - - ">="
77
77
  - !ruby/object:Gem::Version
78
78
  version: '0'
79
79
  type: :development
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
- - - '>='
83
+ - - ">="
84
84
  - !ruby/object:Gem::Version
85
85
  version: '0'
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: pry-nav
88
88
  requirement: !ruby/object:Gem::Requirement
89
89
  requirements:
90
- - - '>='
90
+ - - ">="
91
91
  - !ruby/object:Gem::Version
92
92
  version: '0'
93
93
  type: :development
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - '>='
97
+ - - ">="
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  - !ruby/object:Gem::Dependency
101
101
  name: rake
102
102
  requirement: !ruby/object:Gem::Requirement
103
103
  requirements:
104
- - - '>='
104
+ - - ">="
105
105
  - !ruby/object:Gem::Version
106
106
  version: '0'
107
107
  type: :development
108
108
  prerelease: false
109
109
  version_requirements: !ruby/object:Gem::Requirement
110
110
  requirements:
111
- - - '>='
111
+ - - ">="
112
112
  - !ruby/object:Gem::Version
113
113
  version: '0'
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: rspec
116
116
  requirement: !ruby/object:Gem::Requirement
117
117
  requirements:
118
- - - '>='
118
+ - - ">="
119
119
  - !ruby/object:Gem::Version
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
123
  version_requirements: !ruby/object:Gem::Requirement
124
124
  requirements:
125
- - - '>='
125
+ - - ">="
126
126
  - !ruby/object:Gem::Version
127
127
  version: '0'
128
128
  - !ruby/object:Gem::Dependency
129
129
  name: simplecov
130
130
  requirement: !ruby/object:Gem::Requirement
131
131
  requirements:
132
- - - '>='
132
+ - - ">="
133
133
  - !ruby/object:Gem::Version
134
134
  version: '0'
135
135
  type: :development
136
136
  prerelease: false
137
137
  version_requirements: !ruby/object:Gem::Requirement
138
138
  requirements:
139
- - - '>='
139
+ - - ">="
140
140
  - !ruby/object:Gem::Version
141
141
  version: '0'
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: yard
144
144
  requirement: !ruby/object:Gem::Requirement
145
145
  requirements:
146
- - - '>='
146
+ - - ">="
147
147
  - !ruby/object:Gem::Version
148
148
  version: '0'
149
149
  type: :development
150
150
  prerelease: false
151
151
  version_requirements: !ruby/object:Gem::Requirement
152
152
  requirements:
153
- - - '>='
153
+ - - ">="
154
154
  - !ruby/object:Gem::Version
155
155
  version: '0'
156
156
  - !ruby/object:Gem::Dependency
157
157
  name: timecop
158
158
  requirement: !ruby/object:Gem::Requirement
159
159
  requirements:
160
- - - '>='
160
+ - - ">="
161
161
  - !ruby/object:Gem::Version
162
162
  version: '0'
163
163
  type: :development
164
164
  prerelease: false
165
165
  version_requirements: !ruby/object:Gem::Requirement
166
166
  requirements:
167
- - - '>='
167
+ - - ">="
168
168
  - !ruby/object:Gem::Version
169
169
  version: '0'
170
170
  - !ruby/object:Gem::Dependency
171
171
  name: perftools.rb
172
172
  requirement: !ruby/object:Gem::Requirement
173
173
  requirements:
174
- - - '>='
174
+ - - ">="
175
175
  - !ruby/object:Gem::Version
176
176
  version: '0'
177
177
  type: :development
178
178
  prerelease: false
179
179
  version_requirements: !ruby/object:Gem::Requirement
180
180
  requirements:
181
- - - '>='
181
+ - - ">="
182
182
  - !ruby/object:Gem::Version
183
183
  version: '0'
184
184
  description: Google Protocol Buffers serialization and RPC implementation for Ruby.
@@ -193,9 +193,9 @@ executables:
193
193
  extensions: []
194
194
  extra_rdoc_files: []
195
195
  files:
196
- - .gitignore
197
- - .travis.yml
198
- - .yardopts
196
+ - ".gitignore"
197
+ - ".travis.yml"
198
+ - ".yardopts"
199
199
  - CHANGES.md
200
200
  - CONTRIBUTING.md
201
201
  - Gemfile
@@ -378,17 +378,17 @@ require_paths:
378
378
  - lib
379
379
  required_ruby_version: !ruby/object:Gem::Requirement
380
380
  requirements:
381
- - - '>='
381
+ - - ">="
382
382
  - !ruby/object:Gem::Version
383
383
  version: '0'
384
384
  required_rubygems_version: !ruby/object:Gem::Requirement
385
385
  requirements:
386
- - - '>='
386
+ - - ">="
387
387
  - !ruby/object:Gem::Version
388
388
  version: '0'
389
389
  requirements: []
390
390
  rubyforge_project:
391
- rubygems_version: 2.1.2
391
+ rubygems_version: 2.2.2
392
392
  signing_key:
393
393
  specification_version: 4
394
394
  summary: Google Protocol Buffers serialization and RPC implementation for Ruby.