grpc_kit 0.1.8 → 0.1.9
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/examples/helloworld_client.rb +1 -1
- data/examples/routeguide_client.rb +33 -0
- data/examples/routeguide_server.rb +17 -0
- data/lib/grpc.rb +2 -1
- data/lib/grpc_kit.rb +4 -1
- data/lib/grpc_kit/calls.rb +17 -3
- data/lib/grpc_kit/calls/client_bidi_streamer.rb +63 -0
- data/lib/grpc_kit/calls/client_client_streamer.rb +8 -4
- data/lib/grpc_kit/calls/client_request_response.rb +7 -4
- data/lib/grpc_kit/calls/client_server_streamer.rb +7 -4
- data/lib/grpc_kit/calls/server_bidi_streamer.rb +43 -0
- data/lib/grpc_kit/calls/server_client_streamer.rb +5 -1
- data/lib/grpc_kit/calls/server_request_response.rb +5 -1
- data/lib/grpc_kit/calls/server_server_streamer.rb +5 -1
- data/lib/grpc_kit/client.rb +22 -4
- data/lib/grpc_kit/errors.rb +25 -11
- data/lib/grpc_kit/grpc/dsl.rb +17 -2
- data/lib/grpc_kit/grpc/generic_service.rb +0 -13
- data/lib/grpc_kit/grpc/interceptor.rb +27 -0
- data/lib/grpc_kit/grpc/logger.rb +4 -1
- data/lib/grpc_kit/grpc_time.rb +3 -1
- data/lib/grpc_kit/interceptors.rb +3 -0
- data/lib/grpc_kit/interceptors/client_bidi_streamer.rb +20 -0
- data/lib/grpc_kit/interceptors/client_client_streamer.rb +3 -0
- data/lib/grpc_kit/interceptors/client_request_response.rb +3 -0
- data/lib/grpc_kit/interceptors/client_server_streamer.rb +3 -0
- data/lib/grpc_kit/interceptors/server_bidi_streamer.rb +17 -0
- data/lib/grpc_kit/interceptors/server_client_streamer.rb +2 -0
- data/lib/grpc_kit/interceptors/server_request_response.rb +2 -0
- data/lib/grpc_kit/interceptors/server_server_streamer.rb +2 -0
- data/lib/grpc_kit/protobuffer.rb +8 -0
- data/lib/grpc_kit/rpc_desc.rb +21 -4
- data/lib/grpc_kit/rpcs.rb +4 -0
- data/lib/grpc_kit/rpcs/client_bidi_streamer.rb +20 -1
- data/lib/grpc_kit/rpcs/client_client_streamer.rb +5 -0
- data/lib/grpc_kit/rpcs/client_request_response.rb +11 -17
- data/lib/grpc_kit/rpcs/client_server_streamer.rb +5 -0
- data/lib/grpc_kit/rpcs/server_bidi_streamer.rb +17 -0
- data/lib/grpc_kit/rpcs/server_client_streamer.rb +3 -0
- data/lib/grpc_kit/rpcs/server_request_response.rb +3 -0
- data/lib/grpc_kit/rpcs/server_server_streamer.rb +3 -0
- data/lib/grpc_kit/server.rb +12 -4
- data/lib/grpc_kit/session/client_session.rb +7 -2
- data/lib/grpc_kit/session/drain_controller.rb +2 -0
- data/lib/grpc_kit/session/headers.rb +11 -0
- data/lib/grpc_kit/session/io.rb +9 -0
- data/lib/grpc_kit/session/recv_buffer.rb +7 -0
- data/lib/grpc_kit/session/send_buffer.rb +8 -0
- data/lib/grpc_kit/session/server_session.rb +8 -5
- data/lib/grpc_kit/session/stream.rb +17 -3
- data/lib/grpc_kit/session/stream_status.rb +7 -1
- data/lib/grpc_kit/stream/client_stream.rb +55 -9
- data/lib/grpc_kit/stream/server_stream.rb +19 -1
- data/lib/grpc_kit/transport/client_transport.rb +39 -3
- data/lib/grpc_kit/transport/packable.rb +9 -3
- data/lib/grpc_kit/transport/server_transport.rb +15 -2
- data/lib/grpc_kit/version.rb +1 -1
- metadata +6 -3
- data/TODO.md +0 -71
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0f50bc31421b7a051756b64bc75d4622e1a66932e919fa2a10d7bc915716969
|
4
|
+
data.tar.gz: 1e881d306e7c88a6a91da602e2771659fe230c523aedaae96e461621091bec70
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 878f6c4a966f9e7af45dc3c57dcb865c93324c21c382439a5b552f67e4dab1ee09f87795af661e39df9cadaf78a20975201fae6af94f2b0b770691369608de55
|
7
|
+
data.tar.gz: 2e7332f3177f51efdc4f625755dbd92a5f5cdea063635eea1d6a1a75bc499ea87af57633903e12e6aebf5da5ddef028ddecc818bb71623a85b1d995c59e065a6
|
@@ -49,6 +49,8 @@ def list_features(stub)
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def record_route(stub, size)
|
52
|
+
$logger.info('===== record_route =====')
|
53
|
+
|
52
54
|
features = File.open(RESOURCE_PATH) do |f|
|
53
55
|
JSON.parse(f.read)
|
54
56
|
end
|
@@ -67,6 +69,36 @@ def record_route(stub, size)
|
|
67
69
|
puts "summary: #{resp[0].inspect}"
|
68
70
|
end
|
69
71
|
|
72
|
+
ROUTE_CHAT_NOTES = [
|
73
|
+
Routeguide::RouteNote.new(message: 'First message', location: Routeguide::Point.new(latitude: 0, longitude: 1)),
|
74
|
+
Routeguide::RouteNote.new(message: 'Second message', location: Routeguide::Point.new(latitude: 0, longitude: 2)),
|
75
|
+
Routeguide::RouteNote.new(message: 'Third message', location: Routeguide::Point.new(latitude: 0, longitude: 3)),
|
76
|
+
Routeguide::RouteNote.new(message: 'Fourth message', location: Routeguide::Point.new(latitude: 0, longitude: 1)),
|
77
|
+
Routeguide::RouteNote.new(message: 'Fifth message', location: Routeguide::Point.new(latitude: 0, longitude: 2)),
|
78
|
+
Routeguide::RouteNote.new(message: 'Sixth message', location: Routeguide::Point.new(latitude: 0, longitude: 3)),
|
79
|
+
].freeze
|
80
|
+
|
81
|
+
def route_chat(stub)
|
82
|
+
$logger.info('===== route_chat =====')
|
83
|
+
|
84
|
+
call = stub.route_chat({})
|
85
|
+
|
86
|
+
t = Thread.new do
|
87
|
+
loop do
|
88
|
+
rn = call.recv
|
89
|
+
$logger.info("Got message #{rn.message} at point point(#{rn.location.latitude}, #{rn.location.longitude})")
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
ROUTE_CHAT_NOTES.each do |rcn|
|
94
|
+
call.send_msg(rcn)
|
95
|
+
sleep 1
|
96
|
+
end
|
97
|
+
|
98
|
+
call.close_and_send
|
99
|
+
t.join
|
100
|
+
end
|
101
|
+
|
70
102
|
opts = {}
|
71
103
|
|
72
104
|
if ENV['GRPC_INTERCEPTOR']
|
@@ -82,5 +114,6 @@ stub = Routeguide::RouteGuide::Stub.new(sock, **opts)
|
|
82
114
|
get_feature(stub)
|
83
115
|
list_features(stub)
|
84
116
|
record_route(stub, 10)
|
117
|
+
route_chat(stub)
|
85
118
|
|
86
119
|
# rubocop:enable Style/GlobalVars
|
@@ -17,6 +17,8 @@ class Server < Routeguide::RouteGuide::Service
|
|
17
17
|
features = JSON.parse(f.read)
|
18
18
|
@features = Hash[features.map { |x| [x['location'], x['name']] }]
|
19
19
|
end
|
20
|
+
|
21
|
+
@route_notes = Hash.new { |h, k| h[k] = [] }
|
20
22
|
end
|
21
23
|
|
22
24
|
def get_feature(point, ctx)
|
@@ -70,6 +72,21 @@ class Server < Routeguide::RouteGuide::Service
|
|
70
72
|
)
|
71
73
|
end
|
72
74
|
|
75
|
+
def route_chat(call)
|
76
|
+
loop do
|
77
|
+
rn = call.recv
|
78
|
+
@logger.info("route_note location=#{rn.location.inspect}, message=#{rn.message}")
|
79
|
+
key = "#{rn.location.latitude} #{rn.location.longitude}"
|
80
|
+
saved_msgs = @route_notes[key]
|
81
|
+
@route_notes[key] << rn.message
|
82
|
+
|
83
|
+
saved_msgs.each do |m|
|
84
|
+
n = Routeguide::RouteNote.new(location: rn.location, message: m)
|
85
|
+
call.send_msg(n)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
73
90
|
private
|
74
91
|
|
75
92
|
COORD_FACTOR = 1e7
|
data/lib/grpc.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
#
|
3
|
+
# Compatible file for xx_services_pb.rb and xx_pb.rb which are created by grpc-tools gem
|
4
4
|
require 'grpc_kit'
|
5
5
|
require 'grpc_kit/grpc/generic_service'
|
6
6
|
require 'grpc_kit/grpc/interceptor'
|
7
|
+
require 'grpc_kit/grpc/logger'
|
7
8
|
|
8
9
|
GRPC = GrpcKit::GRPC
|
data/lib/grpc_kit.rb
CHANGED
@@ -8,13 +8,16 @@ require 'grpc_kit/client'
|
|
8
8
|
|
9
9
|
module GrpcKit
|
10
10
|
class << self
|
11
|
+
# @param value [Logger] Any logger
|
11
12
|
attr_writer :logger
|
12
13
|
|
14
|
+
# @return [Logger]
|
13
15
|
def logger
|
14
16
|
@logger ||= Logger.new(STDOUT, level: ENV['GRPC_KIT_LOGLEVEL'] || :info)
|
15
17
|
end
|
16
18
|
|
17
|
-
# @
|
19
|
+
# @param level [String] :debug, :info, :warn, :error, :fatal or :unknown
|
20
|
+
# @return [void]
|
18
21
|
def self.loglevel=(level)
|
19
22
|
logger.level = level
|
20
23
|
end
|
data/lib/grpc_kit/calls.rb
CHANGED
@@ -6,11 +6,22 @@ module GrpcKit
|
|
6
6
|
Name = Struct.new(:name, :receiver)
|
7
7
|
Reciver = Struct.new(:class)
|
8
8
|
Klass = Struct.new(:service_name)
|
9
|
+
|
10
|
+
# @return [GrpcKit::Calls::Call::Name] gRPC method object
|
9
11
|
attr_reader :method
|
10
12
|
|
11
|
-
# @
|
12
|
-
|
13
|
-
|
13
|
+
# @return [Symbol] gRPC method name
|
14
|
+
attr_reader :method_name
|
15
|
+
|
16
|
+
# @return [String] gRPC service name
|
17
|
+
attr_reader :service_name
|
18
|
+
|
19
|
+
# @return [Hash<String, String>] gRPC metadata
|
20
|
+
attr_reader :metadata
|
21
|
+
|
22
|
+
# @param stream [GrpcKit::Stream::ServerStream|GrpcKit::Stream::ClientStream]
|
23
|
+
# @param config [GrpcKit::MethodConfig]
|
24
|
+
# @param metadata [Hash<String,String>]
|
14
25
|
def initialize(stream:, config:, metadata:, timeout: nil)
|
15
26
|
@config = config
|
16
27
|
@metadata = metadata
|
@@ -26,14 +37,17 @@ module GrpcKit
|
|
26
37
|
@restrict = false
|
27
38
|
end
|
28
39
|
|
40
|
+
# @return [void]
|
29
41
|
def restrict_mode
|
30
42
|
@restrict = true
|
31
43
|
end
|
32
44
|
|
45
|
+
# @return [void]
|
33
46
|
def normal_mode
|
34
47
|
@restrict = false
|
35
48
|
end
|
36
49
|
|
50
|
+
# @return [Time] deadline of this rpc call
|
37
51
|
def deadline
|
38
52
|
@deadline ||= @timeout.to_absolute_time
|
39
53
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'grpc_kit/calls'
|
4
|
+
|
5
|
+
module GrpcKit
|
6
|
+
module Calls::Client
|
7
|
+
class BidiStreamer < GrpcKit::Calls::Call
|
8
|
+
alias outgoing_metadata metadata
|
9
|
+
|
10
|
+
def initialize(*)
|
11
|
+
super
|
12
|
+
@mutex = Mutex.new
|
13
|
+
@send = false
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param data [Object] request message
|
17
|
+
# @param last [Boolean]
|
18
|
+
# @return [void]
|
19
|
+
def send_msg(data, last: false)
|
20
|
+
raise 'No method error' if @restrict
|
21
|
+
|
22
|
+
if @reason
|
23
|
+
raise "Upstream returns an error status: #{@reason}"
|
24
|
+
end
|
25
|
+
|
26
|
+
@mutex.synchronize do
|
27
|
+
@stream.send_msg(data, last: last, metadata: outgoing_metadata)
|
28
|
+
end
|
29
|
+
|
30
|
+
@send = true
|
31
|
+
end
|
32
|
+
|
33
|
+
# This method not is expected to be call in the main thread where #send_msg is called
|
34
|
+
#
|
35
|
+
# @param last [Boolean]
|
36
|
+
# @return [Object] response object
|
37
|
+
def recv(last: false)
|
38
|
+
raise 'No method error' if @restrict
|
39
|
+
|
40
|
+
sleep 0.1 until @send
|
41
|
+
|
42
|
+
loop do
|
43
|
+
msg = @mutex.synchronize do
|
44
|
+
@stream.recv_msg(last: last, blocking: false)
|
45
|
+
end
|
46
|
+
|
47
|
+
unless msg == :wait_readable
|
48
|
+
return msg
|
49
|
+
end
|
50
|
+
end
|
51
|
+
rescue GrpcKit::Errors::BadStatus => e
|
52
|
+
@reason = e
|
53
|
+
raise e
|
54
|
+
end
|
55
|
+
|
56
|
+
def close_and_send
|
57
|
+
@mutex.synchronize do
|
58
|
+
@stream.close_and_send
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -5,22 +5,26 @@ require 'grpc_kit/calls'
|
|
5
5
|
module GrpcKit
|
6
6
|
module Calls::Client
|
7
7
|
class ClientStreamer < GrpcKit::Calls::Call
|
8
|
-
attr_reader :deadline, :service_name, :method_name
|
9
|
-
attr_reader :metadata
|
10
8
|
alias outgoing_metadata metadata
|
11
9
|
|
12
|
-
|
10
|
+
# @param data [Object] request message
|
11
|
+
# @param last [Boolean]
|
12
|
+
# @return [void]
|
13
|
+
def send_msg(data, last: false)
|
13
14
|
raise 'No method error' if @restrict
|
14
15
|
|
15
|
-
@stream.send_msg(data, last: last,
|
16
|
+
@stream.send_msg(data, last: last, metadata: outgoing_metadata)
|
16
17
|
end
|
17
18
|
|
19
|
+
# @param last [Boolean]
|
20
|
+
# @return [Object] response object
|
18
21
|
def recv(last: false)
|
19
22
|
raise 'No method error' if @restrict
|
20
23
|
|
21
24
|
@stream.recv_msg(last: last)
|
22
25
|
end
|
23
26
|
|
27
|
+
# @return [Array<Object>] response objects
|
24
28
|
def close_and_recv
|
25
29
|
@stream.close_and_recv
|
26
30
|
end
|
@@ -5,16 +5,19 @@ require 'grpc_kit/calls'
|
|
5
5
|
module GrpcKit
|
6
6
|
module Calls::Client
|
7
7
|
class RequestResponse < GrpcKit::Calls::Call
|
8
|
-
attr_reader :deadline, :service_name, :method_name
|
9
|
-
attr_reader :metadata
|
10
8
|
alias outgoing_metadata metadata
|
11
9
|
|
12
|
-
|
10
|
+
# @param data [Object] request message
|
11
|
+
# @param last [Boolean]
|
12
|
+
# @return [void]
|
13
|
+
def send_msg(data, last: false)
|
13
14
|
raise 'No method error' if @restrict
|
14
15
|
|
15
|
-
@stream.send_msg(data, last: last,
|
16
|
+
@stream.send_msg(data, last: last, metadata: outgoing_metadata)
|
16
17
|
end
|
17
18
|
|
19
|
+
# @param last [Boolean]
|
20
|
+
# @return [Object] response object
|
18
21
|
def recv(last: false)
|
19
22
|
raise 'No method error' if @restrict
|
20
23
|
|
@@ -5,16 +5,19 @@ require 'grpc_kit/calls'
|
|
5
5
|
module GrpcKit
|
6
6
|
module Calls::Client
|
7
7
|
class ServerStreamer < GrpcKit::Calls::Call
|
8
|
-
attr_reader :deadline, :service_name, :method_name
|
9
|
-
attr_reader :metadata
|
10
8
|
alias outgoing_metadata metadata
|
11
9
|
|
12
|
-
|
10
|
+
# @param data [Object] request message
|
11
|
+
# @param last [Boolean]
|
12
|
+
# @return [void]
|
13
|
+
def send_msg(data, last: false)
|
13
14
|
raise 'No method error' if @restrict
|
14
15
|
|
15
|
-
@stream.send_msg(data, last: last,
|
16
|
+
@stream.send_msg(data, last: last, metadata: outgoing_metadata)
|
16
17
|
end
|
17
18
|
|
19
|
+
# @param last [Boolean]
|
20
|
+
# @return [Object] response object
|
18
21
|
def recv(last: false)
|
19
22
|
raise 'No method error' if @restrict
|
20
23
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'grpc_kit/calls'
|
4
|
+
|
5
|
+
module GrpcKit
|
6
|
+
module Calls::Server
|
7
|
+
class BidiStreamer < GrpcKit::Calls::Call
|
8
|
+
attr_reader :outgoing_initial_metadata, :outgoing_trailing_metadata
|
9
|
+
alias incoming_metadata metadata
|
10
|
+
|
11
|
+
def initialize(*)
|
12
|
+
super
|
13
|
+
|
14
|
+
@outgoing_initial_metadata = {}
|
15
|
+
@outgoing_trailing_metadata = {}
|
16
|
+
end
|
17
|
+
|
18
|
+
# @param data [Object] request message
|
19
|
+
# @param last [Boolean]
|
20
|
+
# @return [void]
|
21
|
+
def send_msg(data, last: false)
|
22
|
+
raise 'No method error' if @restrict
|
23
|
+
|
24
|
+
@stream.send_msg(
|
25
|
+
data,
|
26
|
+
@protobuf,
|
27
|
+
last: last,
|
28
|
+
initial_metadata: @outgoing_initial_metadata,
|
29
|
+
trailing_metadata: @outgoing_trailing_metadata,
|
30
|
+
limit_size: @config.max_send_message_size,
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
# @param last [Boolean]
|
35
|
+
# @return [Object] response object
|
36
|
+
def recv(last: false)
|
37
|
+
raise 'No method error' if @restrict
|
38
|
+
|
39
|
+
@stream.recv_msg(@protobuf, last: last, limit_size: @config.max_receive_message_size)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -5,7 +5,6 @@ require 'grpc_kit/calls'
|
|
5
5
|
module GrpcKit
|
6
6
|
module Calls::Server
|
7
7
|
class ClientStreamer < GrpcKit::Calls::Call
|
8
|
-
attr_reader :deadline, :metadata
|
9
8
|
attr_reader :outgoing_initial_metadata, :outgoing_trailing_metadata
|
10
9
|
alias incoming_metadata metadata
|
11
10
|
|
@@ -16,6 +15,9 @@ module GrpcKit
|
|
16
15
|
@outgoing_trailing_metadata = {}
|
17
16
|
end
|
18
17
|
|
18
|
+
# @param data [Object] request message
|
19
|
+
# @param last [Boolean]
|
20
|
+
# @return [void]
|
19
21
|
def send_msg(data, last: false)
|
20
22
|
raise 'No method error' if @restrict
|
21
23
|
|
@@ -29,6 +31,8 @@ module GrpcKit
|
|
29
31
|
)
|
30
32
|
end
|
31
33
|
|
34
|
+
# @param last [Boolean]
|
35
|
+
# @return [Object] response object
|
32
36
|
def recv(last: false)
|
33
37
|
raise 'No method error' if @restrict
|
34
38
|
|
@@ -5,7 +5,6 @@ require 'grpc_kit/calls'
|
|
5
5
|
module GrpcKit
|
6
6
|
module Calls::Server
|
7
7
|
class RequestResponse < GrpcKit::Calls::Call
|
8
|
-
attr_reader :deadline, :metadata
|
9
8
|
attr_reader :outgoing_initial_metadata, :outgoing_trailing_metadata
|
10
9
|
alias incoming_metadata metadata
|
11
10
|
|
@@ -16,6 +15,9 @@ module GrpcKit
|
|
16
15
|
@outgoing_trailing_metadata = {}
|
17
16
|
end
|
18
17
|
|
18
|
+
# @param data [Object] request message
|
19
|
+
# @param last [Boolean]
|
20
|
+
# @return [void]
|
19
21
|
def send_msg(data, last: false)
|
20
22
|
raise 'No method error' if @restrict
|
21
23
|
|
@@ -29,6 +31,8 @@ module GrpcKit
|
|
29
31
|
)
|
30
32
|
end
|
31
33
|
|
34
|
+
# @param last [Boolean]
|
35
|
+
# @return [Object] response object
|
32
36
|
def recv(last: false)
|
33
37
|
raise 'No method error' if @restrict
|
34
38
|
|
@@ -5,7 +5,6 @@ require 'grpc_kit/calls'
|
|
5
5
|
module GrpcKit
|
6
6
|
module Calls::Server
|
7
7
|
class ServerStreamer < GrpcKit::Calls::Call
|
8
|
-
attr_reader :deadline, :metadata
|
9
8
|
attr_reader :outgoing_initial_metadata, :outgoing_trailing_metadata
|
10
9
|
alias incoming_metadata metadata
|
11
10
|
|
@@ -16,6 +15,9 @@ module GrpcKit
|
|
16
15
|
@outgoing_trailing_metadata = {}
|
17
16
|
end
|
18
17
|
|
18
|
+
# @param data [Object] request message
|
19
|
+
# @param last [Boolean]
|
20
|
+
# @return [void]
|
19
21
|
def send_msg(data, last: false)
|
20
22
|
raise 'No method error' if @restrict
|
21
23
|
|
@@ -29,6 +31,8 @@ module GrpcKit
|
|
29
31
|
)
|
30
32
|
end
|
31
33
|
|
34
|
+
# @param last [Boolean]
|
35
|
+
# @return [Object] response object
|
32
36
|
def recv(last: false)
|
33
37
|
raise 'No method error' if @restrict
|
34
38
|
|