gruf 2.12.0 → 2.13.0

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: 6fbcc0f1b3083a00fa413c9d16bdb126e04a37f5a1cdee3ae05573698e4deb67
4
- data.tar.gz: 5327ddd7497e82d991eba1a7ce37e35c62e9810ae5803227563fa4e6ebee31b4
3
+ metadata.gz: afe8122fa755293990e7fc3ba4209e4629fb70eb9ff77f414e1069c769b8ba98
4
+ data.tar.gz: 76def29dfe24d045328f02f78fbc6b4f0f040df7519fe5879b4cd4d163496b6d
5
5
  SHA512:
6
- metadata.gz: 6ab52c50feb431404c3cbde8b67de6f456b8310ce21a857d9ffcc4b820055773c908d3329a0b965c5b3459583658103f5be7bf3debc5acea541d84b516937c2c
7
- data.tar.gz: 898363f243233aace1aeffd4163b996bd280462a2c444db4c75ad472010ac7bc99f50d5945a2126380a6676a80daeb72b401b94c97010d6920dc796c4b661b2b
6
+ metadata.gz: 49d07b632e0b22b8ed36877e133d85b9098998e6ba0cc46ad2c320611e8b4aa35b3e7b00b8df5250eeebc238cbc0e441643db5bbc77634af6933991990284572
7
+ data.tar.gz: cb5d1ae09b466b84a11c92763219804a456ef0735ce69053dabcbf0f419802e4e917a711947eeb1f7b26c156263c226b0b33bce1b45cc2753c138d9e053d4bfe
data/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@ Changelog for the gruf gem. This includes internal history before the gem was ma
2
2
 
3
3
  ### Pending release
4
4
 
5
+ ### 2.13.0
6
+
7
+ - Remove server mutex handling in deference to core grpc signal handling
8
+ - Relax grpc pin as upstream regression is fixed
9
+
5
10
  ### 2.12.0
6
11
 
7
12
  - Fixed interceptor order to be FIFO as documented, instead of FILO (fixes #139)
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # gruf - gRPC Ruby Framework
2
2
 
3
- [![CircleCI](https://circleci.com/gh/bigcommerce/gruf/tree/main.svg?style=svg)](https://circleci.com/gh/bigcommerce/gruf/tree/main) [![Gem Version](https://badge.fury.io/rb/gruf.svg)](https://badge.fury.io/rb/gruf) [![Documentation](https://inch-ci.org/github/bigcommerce/gruf.svg?branch=main)](https://inch-ci.org/github/bigcommerce/gruf?branch=main)
3
+ [![CircleCI](https://circleci.com/gh/bigcommerce/gruf/tree/main.svg?style=svg)](https://circleci.com/gh/bigcommerce/gruf/tree/main) [![Gem Version](https://badge.fury.io/rb/gruf.svg)](https://badge.fury.io/rb/gruf) [![Documentation](https://inch-ci.org/github/bigcommerce/gruf.svg?branch=main)](https://inch-ci.org/github/bigcommerce/gruf?branch=main) [![Maintainability](https://api.codeclimate.com/v1/badges/4a8e9269f99100aeb7cb/maintainability)](https://codeclimate.com/github/bigcommerce/gruf/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/4a8e9269f99100aeb7cb/test_coverage)](https://codeclimate.com/github/bigcommerce/gruf/test_coverage)
4
4
 
5
5
  gruf is a Ruby framework that wraps the [gRPC Ruby library](https://github.com/grpc/grpc/tree/master/src/ruby) to
6
6
  provide a more streamlined integration into Ruby and Ruby on Rails applications.
data/gruf.gemspec CHANGED
@@ -59,8 +59,8 @@ Gem::Specification.new do |spec|
59
59
  spec.add_runtime_dependency 'activesupport', '> 4'
60
60
  spec.add_runtime_dependency 'concurrent-ruby', '> 1'
61
61
  spec.add_runtime_dependency 'e2mmap', '>= 0.1'
62
- spec.add_runtime_dependency 'grpc', '~> 1.10', '<= 1.41.0'
63
- spec.add_runtime_dependency 'grpc-tools', '~> 1.10', '<= 1.41.0'
62
+ spec.add_runtime_dependency 'grpc', '~> 1.10'
63
+ spec.add_runtime_dependency 'grpc-tools', '~> 1.10'
64
64
  spec.add_runtime_dependency 'json', '>= 2.3'
65
65
  spec.add_runtime_dependency 'slop', '>= 4.6'
66
66
  spec.add_runtime_dependency 'thwait', '>= 0.1'
data/lib/gruf/server.rb CHANGED
@@ -23,6 +23,8 @@ module Gruf
23
23
  class Server
24
24
  class ServerAlreadyStartedError < StandardError; end
25
25
 
26
+ KILL_SIGNALS = %w[INT TERM QUIT].freeze
27
+
26
28
  include Gruf::Loggable
27
29
 
28
30
  # @!attribute [r] port
@@ -43,10 +45,6 @@ module Gruf
43
45
  @interceptors = Gruf::Interceptors::Registry.new unless @interceptors.is_a?(Gruf::Interceptors::Registry)
44
46
  @services = []
45
47
  @started = false
46
- @stop_server = false
47
- @stop_server_cv = ConditionVariable.new
48
- @stop_server_mu = Monitor.new
49
- @server_mu = Monitor.new
50
48
  @hostname = opts.fetch(:hostname, Gruf.server_binding_url)
51
49
  @event_listener_proc = opts.fetch(:event_listener_proc, Gruf.event_listener_proc)
52
50
  setup
@@ -56,30 +54,28 @@ module Gruf
56
54
  # @return [GRPC::RpcServer] The GRPC server running
57
55
  #
58
56
  def server
59
- @server_mu.synchronize do
60
- @server ||= begin
61
- # For backward compatibility, we allow these options to be passed directly
62
- # in the Gruf::Server options, or via Gruf.rpc_server_options.
63
- server_options = {
64
- pool_size: options.fetch(:pool_size, Gruf.rpc_server_options[:pool_size]),
65
- max_waiting_requests: options.fetch(:max_waiting_requests, Gruf.rpc_server_options[:max_waiting_requests]),
66
- poll_period: options.fetch(:poll_period, Gruf.rpc_server_options[:poll_period]),
67
- pool_keep_alive: options.fetch(:pool_keep_alive, Gruf.rpc_server_options[:pool_keep_alive]),
68
- connect_md_proc: options.fetch(:connect_md_proc, Gruf.rpc_server_options[:connect_md_proc]),
69
- server_args: options.fetch(:server_args, Gruf.rpc_server_options[:server_args])
70
- }
71
-
72
- server = if @event_listener_proc
73
- server_options[:event_listener_proc] = @event_listener_proc
74
- Gruf::InstrumentableGrpcServer.new(**server_options)
75
- else
76
- GRPC::RpcServer.new(**server_options)
77
- end
78
-
79
- @port = server.add_http2_port(@hostname, ssl_credentials)
80
- @services.each { |s| server.handle(s) }
81
- server
82
- end
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
83
79
  end
84
80
  end
85
81
 
@@ -92,23 +88,11 @@ module Gruf
92
88
 
93
89
  server_thread = Thread.new do
94
90
  logger.info { "Starting gruf server at #{@hostname}..." }
95
- server.run
96
- end
97
-
98
- stop_server_thread = Thread.new do
99
- loop do
100
- break if @stop_server
101
-
102
- @stop_server_mu.synchronize { @stop_server_cv.wait(@stop_server_mu, 10) }
103
- end
104
- logger.info { 'Shutting down...' }
105
- server.stop
91
+ server.run_till_terminated_or_interrupted(KILL_SIGNALS)
106
92
  end
107
-
108
93
  server.wait_till_running
109
94
  @started = true
110
95
  update_proc_title(:serving)
111
- stop_server_thread.join
112
96
  server_thread.join
113
97
  @started = false
114
98
 
@@ -204,28 +188,10 @@ module Gruf
204
188
  #
205
189
  # :nocov:
206
190
  def setup
207
- setup_signal_handlers
208
191
  load_controllers
209
192
  end
210
193
  # :nocov:
211
194
 
212
- ##
213
- # Register signal handlers
214
- #
215
- # :nocov:
216
- def setup_signal_handlers
217
- Signal.trap('INT') do
218
- @stop_server = true
219
- @stop_server_cv.broadcast
220
- end
221
-
222
- Signal.trap('TERM') do
223
- @stop_server = true
224
- @stop_server_cv.broadcast
225
- end
226
- end
227
- # :nocov:
228
-
229
195
  ##
230
196
  # Auto-load all gRPC handlers
231
197
  #
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.12.0'
19
+ VERSION = '2.13.0'
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.12.0
4
+ version: 2.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shaun McCormick
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-29 00:00:00.000000000 Z
11
+ date: 2022-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler-audit
@@ -241,9 +241,6 @@ dependencies:
241
241
  - - "~>"
242
242
  - !ruby/object:Gem::Version
243
243
  version: '1.10'
244
- - - "<="
245
- - !ruby/object:Gem::Version
246
- version: 1.41.0
247
244
  type: :runtime
248
245
  prerelease: false
249
246
  version_requirements: !ruby/object:Gem::Requirement
@@ -251,9 +248,6 @@ dependencies:
251
248
  - - "~>"
252
249
  - !ruby/object:Gem::Version
253
250
  version: '1.10'
254
- - - "<="
255
- - !ruby/object:Gem::Version
256
- version: 1.41.0
257
251
  - !ruby/object:Gem::Dependency
258
252
  name: grpc-tools
259
253
  requirement: !ruby/object:Gem::Requirement
@@ -261,9 +255,6 @@ dependencies:
261
255
  - - "~>"
262
256
  - !ruby/object:Gem::Version
263
257
  version: '1.10'
264
- - - "<="
265
- - !ruby/object:Gem::Version
266
- version: 1.41.0
267
258
  type: :runtime
268
259
  prerelease: false
269
260
  version_requirements: !ruby/object:Gem::Requirement
@@ -271,9 +262,6 @@ dependencies:
271
262
  - - "~>"
272
263
  - !ruby/object:Gem::Version
273
264
  version: '1.10'
274
- - - "<="
275
- - !ruby/object:Gem::Version
276
- version: 1.41.0
277
265
  - !ruby/object:Gem::Dependency
278
266
  name: json
279
267
  requirement: !ruby/object:Gem::Requirement
@@ -394,7 +382,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
394
382
  - !ruby/object:Gem::Version
395
383
  version: '0'
396
384
  requirements: []
397
- rubygems_version: 3.3.4
385
+ rubygems_version: 3.2.33
398
386
  signing_key:
399
387
  specification_version: 4
400
388
  summary: gRPC Ruby Framework