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 +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
|
-
[![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'
|
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
|