gruf 2.12.0 → 2.13.0

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