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 +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +1 -1
- data/gruf.gemspec +2 -2
- data/lib/gruf/server.rb +25 -59
- data/lib/gruf/version.rb +1 -1
- metadata +3 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: afe8122fa755293990e7fc3ba4209e4629fb70eb9ff77f414e1069c769b8ba98
|
4
|
+
data.tar.gz: 76def29dfe24d045328f02f78fbc6b4f0f040df7519fe5879b4cd4d163496b6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
[](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.
|
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'
|
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/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,11 @@ 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
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
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.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:
|
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.
|
385
|
+
rubygems_version: 3.2.33
|
398
386
|
signing_key:
|
399
387
|
specification_version: 4
|
400
388
|
summary: gRPC Ruby Framework
|