gruf 1.2.5 → 1.2.6
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 +4 -0
- data/lib/gruf/client.rb +10 -6
- data/lib/gruf/server.rb +16 -5
- data/lib/gruf/service.rb +37 -13
- data/lib/gruf/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 475f72d5e3590bcbdbc32f8698bf835540c964c1
|
4
|
+
data.tar.gz: 877dd14c01855fba9e2006bf50df04b07cfbb804
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2451565946bade99073f6dc7d567d623761a2f35a6c7541fdfc6dd431c29046635e057a1da9441390cbae5e32c8a6eb85e8a913ea851a9f7cc3079ea8971d4e1
|
7
|
+
data.tar.gz: 95d1fe70fde36eb85fae02c97cb518277f0d182f8d7bb5f659125b5d6bbcfa390e09707379c8969144384f34be782715d52c145ec83945bb37834f69405cf1be
|
data/CHANGELOG.md
CHANGED
data/lib/gruf/client.rb
CHANGED
@@ -89,7 +89,7 @@ module Gruf
|
|
89
89
|
# @return [Gruf::Response] The response from the server
|
90
90
|
# @raise [Gruf::Client::Error|GRPC::BadStatus] If an error occurs, an exception will be raised according to the
|
91
91
|
# error type that was returned
|
92
|
-
def call(request_method, params = {}, metadata = {}, opts = {})
|
92
|
+
def call(request_method, params = {}, metadata = {}, opts = {}, &block)
|
93
93
|
request_method = request_method.to_sym
|
94
94
|
req = streaming_request?(request_method) ? params : request_object(request_method, params)
|
95
95
|
md = build_metadata(metadata)
|
@@ -97,11 +97,16 @@ module Gruf
|
|
97
97
|
|
98
98
|
raise NotImplementedError, "The method #{request_method} has not been implemented in this service." unless call_sig
|
99
99
|
|
100
|
-
execute(call_sig, req, md, opts)
|
100
|
+
resp = execute(call_sig, req, md, opts, &block)
|
101
|
+
|
102
|
+
Gruf::Response.new(resp.result, resp.time)
|
101
103
|
rescue GRPC::BadStatus => e
|
102
104
|
emk = Gruf.error_metadata_key.to_s
|
103
105
|
raise Gruf::Client::Error, error_deserializer_class.new(e.metadata[emk]).deserialize if e.respond_to?(:metadata) && e.metadata.key?(emk)
|
104
106
|
raise # passthrough
|
107
|
+
rescue => e
|
108
|
+
Gruf.logger.error e.message
|
109
|
+
raise
|
105
110
|
end
|
106
111
|
|
107
112
|
private
|
@@ -123,13 +128,12 @@ module Gruf
|
|
123
128
|
# @param [Hash] md (Optional) A hash of metadata key/values that are transported with the client request
|
124
129
|
# @param [Hash] opts (Optional) A hash of options to send to the gRPC request_response method
|
125
130
|
#
|
126
|
-
def execute(call_sig, req, md, opts = {})
|
127
|
-
|
131
|
+
def execute(call_sig, req, md, opts = {}, &block)
|
132
|
+
Timer.time do
|
128
133
|
opts[:return_op] = true
|
129
134
|
opts[:metadata] = md
|
130
|
-
send(call_sig, req, opts)
|
135
|
+
send(call_sig, req, opts, &block)
|
131
136
|
end
|
132
|
-
Gruf::Response.new(timed.result, timed.time)
|
133
137
|
end
|
134
138
|
|
135
139
|
##
|
data/lib/gruf/server.rb
CHANGED
@@ -25,6 +25,8 @@ module Gruf
|
|
25
25
|
# @return [Array<Class>] The services this server is handling
|
26
26
|
attr_accessor :services
|
27
27
|
|
28
|
+
attr_reader :server
|
29
|
+
|
28
30
|
##
|
29
31
|
# Initialize the server and load and setup the services
|
30
32
|
#
|
@@ -35,17 +37,26 @@ module Gruf
|
|
35
37
|
load_services(services)
|
36
38
|
end
|
37
39
|
|
40
|
+
##
|
41
|
+
# @return [GRPC::RpcServer] The GRPC server running
|
42
|
+
#
|
43
|
+
def server
|
44
|
+
unless @server
|
45
|
+
@server = GRPC::RpcServer.new(Gruf.server_options)
|
46
|
+
@server.add_http2_port(Gruf.server_binding_url, ssl_credentials)
|
47
|
+
services.each do |s|
|
48
|
+
@server.handle(s)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
@server
|
52
|
+
end
|
53
|
+
|
38
54
|
##
|
39
55
|
# Start the gRPC server
|
40
56
|
#
|
41
57
|
# :nocov:
|
42
58
|
def start!
|
43
59
|
logger.info { 'Booting gRPC Server...' }
|
44
|
-
server = GRPC::RpcServer.new(Gruf.server_options)
|
45
|
-
server.add_http2_port Gruf.server_binding_url, ssl_credentials
|
46
|
-
services.each do |s|
|
47
|
-
server.handle(s)
|
48
|
-
end
|
49
60
|
server.run_till_terminated
|
50
61
|
logger.info { 'Shutting down gRPC server...' }
|
51
62
|
end
|
data/lib/gruf/service.rb
CHANGED
@@ -36,12 +36,37 @@ module Gruf
|
|
36
36
|
return if @__last_methods_added && @__last_methods_added.include?(method_name)
|
37
37
|
return unless rpc_handler_names.include?(method_name)
|
38
38
|
|
39
|
+
rpc_desc = rpc_descs[method_name.to_s.camelcase.to_sym]
|
40
|
+
|
39
41
|
with = :"#{method_name}_with_intercept"
|
40
42
|
without = :"#{method_name}_without_intercept"
|
41
43
|
@__last_methods_added = [method_name, with, without]
|
42
|
-
|
43
|
-
|
44
|
+
|
45
|
+
if rpc_desc
|
46
|
+
if rpc_desc.request_response?
|
47
|
+
define_method(with) do |request, call|
|
48
|
+
call_chain(method_name, request, call)
|
49
|
+
end
|
50
|
+
elsif rpc_desc.client_streamer?
|
51
|
+
define_method(with) do |call|
|
52
|
+
call_chain(method_name, nil, call)
|
53
|
+
end
|
54
|
+
elsif rpc_desc.server_streamer?
|
55
|
+
define_method(with) do |request, call, &block|
|
56
|
+
call_chain(method_name, request, call, &block)
|
57
|
+
end
|
58
|
+
else # bidi
|
59
|
+
define_method(with) do |requests, call, &block|
|
60
|
+
call_chain(method_name, requests, call, &block)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
else
|
64
|
+
# fallback to the catch-all
|
65
|
+
define_method with do |*args, &block|
|
66
|
+
call_chain(method_name, *args, &block)
|
67
|
+
end
|
44
68
|
end
|
69
|
+
|
45
70
|
alias_method without, method_name
|
46
71
|
alias_method method_name, with
|
47
72
|
@__last_methods_added = nil
|
@@ -216,23 +241,13 @@ module Gruf
|
|
216
241
|
# @return [Object] The response object
|
217
242
|
#
|
218
243
|
def call_chain(original_call_sig, req, call, &block)
|
219
|
-
# this is a workaround until the gRPC core Ruby client implements interceptors
|
220
|
-
# due to the signatures being different for the different types of requests. After
|
221
|
-
# interceptors are added to gRPC core, we will need to release gruf 2.0 and redo
|
222
|
-
# the interceptor signatures for gruf
|
223
|
-
streamed_request = call.nil?
|
224
|
-
if streamed_request
|
225
|
-
call = req
|
226
|
-
req = nil
|
227
|
-
end
|
228
|
-
|
229
244
|
outer_around_call(original_call_sig, req, call) do
|
230
245
|
begin
|
231
246
|
before_call(original_call_sig, req, call)
|
232
247
|
|
233
248
|
result = around_call(original_call_sig, req, call) do
|
234
249
|
# send the actual request to gRPC
|
235
|
-
if
|
250
|
+
if req.nil?
|
236
251
|
send("#{original_call_sig}_without_intercept", call, &block)
|
237
252
|
else
|
238
253
|
send("#{original_call_sig}_without_intercept", req, call, &block)
|
@@ -256,6 +271,15 @@ module Gruf
|
|
256
271
|
fail!(req, call, :internal, :unknown, error_message)
|
257
272
|
end
|
258
273
|
|
274
|
+
##
|
275
|
+
# Return the appropriate RPC descriptor for a given call signature on this service
|
276
|
+
#
|
277
|
+
# @return [GRPC::RpcDesc]
|
278
|
+
#
|
279
|
+
def rpc_desc(call_signature)
|
280
|
+
self.class.rpc_descs[call_signature.to_s.camelcase.to_sym]
|
281
|
+
end
|
282
|
+
|
259
283
|
##
|
260
284
|
# Add a field error to this endpoint
|
261
285
|
#
|
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: 1.2.
|
4
|
+
version: 1.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shaun McCormick
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -159,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
159
|
version: '0'
|
160
160
|
requirements: []
|
161
161
|
rubyforge_project:
|
162
|
-
rubygems_version: 2.6.
|
162
|
+
rubygems_version: 2.6.13
|
163
163
|
signing_key:
|
164
164
|
specification_version: 4
|
165
165
|
summary: gRPC Ruby Framework
|