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 +4 -4
- data/CHANGELOG.md +15 -0
- data/README.md +2 -2
- data/gruf.gemspec +3 -3
- data/lib/gruf/configuration.rb +1 -1
- data/lib/gruf/server.rb +25 -60
- data/lib/gruf/version.rb +1 -1
- metadata +4 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: aebffd1712a25d5025e60e61797fd6089417db3d79c5be2de9374b3eeda71571
|
|
4
|
+
data.tar.gz: 82324e0b421ac2d82d2133dcf482746e6c6faaa31f7cbf50de3adaf31ae857ac
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
[](https://circleci.com/gh/bigcommerce/gruf/tree/main) [](https://badge.fury.io/rb/gruf) [](https://inch-ci.org/github/bigcommerce/gruf?branch=main)
|
|
3
|
+
[](https://circleci.com/gh/bigcommerce/gruf/tree/main) [](https://badge.fury.io/rb/gruf) [](https://inch-ci.org/github/bigcommerce/gruf?branch=main) [](https://codeclimate.com/github/bigcommerce/gruf/maintainability) [](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.
|
|
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.
|
|
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'
|
|
63
|
-
spec.add_runtime_dependency 'grpc-tools', '~> 1.10'
|
|
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/configuration.rb
CHANGED
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
|
-
@
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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.
|
|
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
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.
|
|
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:
|
|
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.
|
|
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.
|
|
385
|
+
rubygems_version: 3.3.7
|
|
398
386
|
signing_key:
|
|
399
387
|
specification_version: 4
|
|
400
388
|
summary: gRPC Ruby Framework
|