gruf 2.12.0 → 2.14.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: aebffd1712a25d5025e60e61797fd6089417db3d79c5be2de9374b3eeda71571
4
+ data.tar.gz: 82324e0b421ac2d82d2133dcf482746e6c6faaa31f7cbf50de3adaf31ae857ac
5
5
  SHA512:
6
- metadata.gz: 6ab52c50feb431404c3cbde8b67de6f456b8310ce21a857d9ffcc4b820055773c908d3329a0b965c5b3459583658103f5be7bf3debc5acea541d84b516937c2c
7
- data.tar.gz: 898363f243233aace1aeffd4163b996bd280462a2c444db4c75ad472010ac7bc99f50d5945a2126380a6676a80daeb72b401b94c97010d6920dc796c4b661b2b
6
+ metadata.gz: eae3c9439c9b8e9c6b7d26a30c7485aac0c3919bb174a9b2a8b23b7f863f5f2ddacbb52c87489724ac9e4345214ec585f257f852e94d8af27486ec12bb971aaf
7
+ data.tar.gz: 0fb952bb1e354fc5f756e1263b5a1929e68647df757d5da97d0689aa4f09185abd2cd4f91d023faf56fa75fc9b828098c670cf17a5bd171b2511ae0ae5d4096b
data/CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@ 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.0
6
+
7
+ - Set default client host to 0.0.0.0:9001 (same as default server host)
8
+ - Add support for Ruby 3.1
9
+
10
+ ### 2.13.1
11
+
12
+ - Fix issue with race condition in server starts where servers may fail to bind connections and never reach
13
+ serving state (fixes #147)
14
+
15
+ ### 2.13.0
16
+
17
+ - Remove server mutex handling in deference to core grpc signal handling
18
+ - Relax grpc pin as upstream regression is fixed
19
+
5
20
  ### 2.12.0
6
21
 
7
22
  - 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.
@@ -17,7 +17,7 @@ up fast and efficiently at scale. Some of its features include:
17
17
  still preserving gRPC BadStatus codes
18
18
  * Server and client execution timings in responses
19
19
 
20
- gruf currently has active support for gRPC 1.10.x+. gruf is compatible and tested with Ruby 2.2-3.0.
20
+ gruf currently has active support for gRPC 1.10.x+. gruf is compatible and tested with Ruby 2.6-3.1.
21
21
  gruf is also not [Rails](https://github.com/rails/rails)-specific, and can be used in any Ruby framework
22
22
  (such as [Grape](https://github.com/ruby-grape/grape) or [dry-rb](https://dry-rb.org/), for instance).
23
23
 
data/gruf.gemspec CHANGED
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
33
33
  spec.executables << 'gruf'
34
34
  spec.require_paths = ['lib']
35
35
 
36
- spec.required_ruby_version = '>= 2.6', '< 3.1'
36
+ spec.required_ruby_version = '>= 2.6', '< 3.2'
37
37
 
38
38
  spec.metadata['rubygems_mfa_required'] = 'true'
39
39
 
@@ -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'
@@ -84,7 +84,7 @@ module Gruf
84
84
  interceptors: nil,
85
85
  hooks: nil,
86
86
  default_channel_credentials: nil,
87
- default_client_host: '',
87
+ default_client_host: '0.0.0.0:9001',
88
88
  use_ssl: false,
89
89
  ssl_crt_file: '',
90
90
  ssl_key_file: '',
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,10 @@ 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
- server.wait_till_running
109
93
  @started = true
110
94
  update_proc_title(:serving)
111
- stop_server_thread.join
112
95
  server_thread.join
113
96
  @started = false
114
97
 
@@ -204,28 +187,10 @@ module Gruf
204
187
  #
205
188
  # :nocov:
206
189
  def setup
207
- setup_signal_handlers
208
190
  load_controllers
209
191
  end
210
192
  # :nocov:
211
193
 
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
194
  ##
230
195
  # Auto-load all gRPC handlers
231
196
  #
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.14.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.14.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-04-08 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
@@ -387,14 +375,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
387
375
  version: '2.6'
388
376
  - - "<"
389
377
  - !ruby/object:Gem::Version
390
- version: '3.1'
378
+ version: '3.2'
391
379
  required_rubygems_version: !ruby/object:Gem::Requirement
392
380
  requirements:
393
381
  - - ">="
394
382
  - !ruby/object:Gem::Version
395
383
  version: '0'
396
384
  requirements: []
397
- rubygems_version: 3.3.4
385
+ rubygems_version: 3.3.7
398
386
  signing_key:
399
387
  specification_version: 4
400
388
  summary: gRPC Ruby Framework