gruf 2.14.0 → 2.14.1

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