gruf 2.14.0 → 2.14.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aebffd1712a25d5025e60e61797fd6089417db3d79c5be2de9374b3eeda71571
4
- data.tar.gz: 82324e0b421ac2d82d2133dcf482746e6c6faaa31f7cbf50de3adaf31ae857ac
3
+ metadata.gz: a94efb294635ae84890e1f131927003b8cacb0306947109c96fd002e02c87fee
4
+ data.tar.gz: 11983bf914472178ed2935d7ee0faf7c60d4fd2204fc6b7b3b0985449c7b5c37
5
5
  SHA512:
6
- metadata.gz: eae3c9439c9b8e9c6b7d26a30c7485aac0c3919bb174a9b2a8b23b7f863f5f2ddacbb52c87489724ac9e4345214ec585f257f852e94d8af27486ec12bb971aaf
7
- data.tar.gz: 0fb952bb1e354fc5f756e1263b5a1929e68647df757d5da97d0689aa4f09185abd2cd4f91d023faf56fa75fc9b828098c670cf17a5bd171b2511ae0ae5d4096b
6
+ metadata.gz: bf230312d6315af4534e4bb92bbd7405a9850c1ec415895e7cb25f382239f887b8fadf0940207459d237c81c3fe2da0647244c3b1100f73a441c77e118a9bea6
7
+ data.tar.gz: e505ca2046aa82164be4656aca0b9ad7f696c070abd5c7ea52f8d6afd6e803feaaef095cf96825a2b8dc8b186f4015b8430f68f0c1f9ce472d2764976d596a4f
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@ Changelog for the gruf gem. This includes internal history before the gem was ma
2
2
 
3
3
  ### Pending release
4
4
 
5
+ ### 2.14.1
6
+
7
+ - Fix issue where the server object hits thread contention in certain race conditions
8
+
5
9
  ### 2.14.0
6
10
 
7
11
  - Set default client host to 0.0.0.0:9001 (same as default server host)
data/lib/gruf/server.rb CHANGED
@@ -54,28 +54,30 @@ module Gruf
54
54
  # @return [GRPC::RpcServer] The GRPC server running
55
55
  #
56
56
  def server
57
- @server ||= begin
58
- # For backward compatibility, we allow these options to be passed directly
59
- # in the Gruf::Server options, or via Gruf.rpc_server_options.
60
- server_options = {
61
- pool_size: options.fetch(:pool_size, Gruf.rpc_server_options[:pool_size]),
62
- max_waiting_requests: options.fetch(:max_waiting_requests, Gruf.rpc_server_options[:max_waiting_requests]),
63
- poll_period: options.fetch(:poll_period, Gruf.rpc_server_options[:poll_period]),
64
- pool_keep_alive: options.fetch(:pool_keep_alive, Gruf.rpc_server_options[:pool_keep_alive]),
65
- connect_md_proc: options.fetch(:connect_md_proc, Gruf.rpc_server_options[:connect_md_proc]),
66
- server_args: options.fetch(:server_args, Gruf.rpc_server_options[:server_args])
67
- }
68
-
69
- server = if @event_listener_proc
70
- server_options[:event_listener_proc] = @event_listener_proc
71
- Gruf::InstrumentableGrpcServer.new(**server_options)
72
- else
73
- GRPC::RpcServer.new(**server_options)
74
- end
75
-
76
- @port = server.add_http2_port(@hostname, ssl_credentials)
77
- @services.each { |s| server.handle(s) }
78
- server
57
+ server_mutex do
58
+ @server ||= begin
59
+ # For backward compatibility, we allow these options to be passed directly
60
+ # in the Gruf::Server options, or via Gruf.rpc_server_options.
61
+ server_options = {
62
+ pool_size: options.fetch(:pool_size, Gruf.rpc_server_options[:pool_size]),
63
+ max_waiting_requests: options.fetch(:max_waiting_requests, Gruf.rpc_server_options[:max_waiting_requests]),
64
+ poll_period: options.fetch(:poll_period, Gruf.rpc_server_options[:poll_period]),
65
+ pool_keep_alive: options.fetch(:pool_keep_alive, Gruf.rpc_server_options[:pool_keep_alive]),
66
+ connect_md_proc: options.fetch(:connect_md_proc, Gruf.rpc_server_options[:connect_md_proc]),
67
+ server_args: options.fetch(:server_args, Gruf.rpc_server_options[:server_args])
68
+ }
69
+
70
+ server = if @event_listener_proc
71
+ server_options[:event_listener_proc] = @event_listener_proc
72
+ Gruf::InstrumentableGrpcServer.new(**server_options)
73
+ else
74
+ GRPC::RpcServer.new(**server_options)
75
+ end
76
+
77
+ @port = server.add_http2_port(@hostname, ssl_credentials)
78
+ @services.each { |s| server.handle(s) }
79
+ server
80
+ end
79
81
  end
80
82
  end
81
83
 
@@ -242,5 +244,17 @@ module Gruf
242
244
  Process.setproctitle("gruf #{Gruf::VERSION} -- #{state}")
243
245
  end
244
246
  # :nocov:
247
+ #
248
+
249
+ ##
250
+ # Handle thread-safe access to the server
251
+ #
252
+ def server_mutex(&block)
253
+ @server_mutex ||= begin
254
+ require 'monitor'
255
+ Monitor.new
256
+ end
257
+ @server_mutex.synchronize(&block)
258
+ end
245
259
  end
246
260
  end
data/lib/gruf/version.rb CHANGED
@@ -16,5 +16,5 @@
16
16
  # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17
17
  #
18
18
  module Gruf
19
- VERSION = '2.14.0'
19
+ VERSION = '2.14.1'
20
20
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gruf
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.14.0
4
+ version: 2.14.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shaun McCormick
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-08 00:00:00.000000000 Z
11
+ date: 2022-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler-audit