grpc_kit 0.1.1 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 278f9b00d1dd37370eae8a829ec68742bcfdd9f693e9189d3abfd0404d2cb31a
4
- data.tar.gz: 334798bf715bbb1aacab0507457c90a9289c0249c728728e53c7663359318f58
3
+ metadata.gz: db6a319fa0f74330575752eb203e867d4882d869ec12f73643bf11bc3f147c8d
4
+ data.tar.gz: 376c711925c3f8534d7e286ed1bc7015ae711f7d4e2998b89fd8a2a2a2a0daac
5
5
  SHA512:
6
- metadata.gz: 25a7c01b82e0726470147c38be66243226483ddf1dafd6b292201cf4c3da99949dc99a2a298e9166f395b531cf936d279a52789730601e32a416378551f2992a
7
- data.tar.gz: 70fa89ff80eebc5d23bcb0e9b1bec9b3190bba7b2fcb00e7d3eb55f0b1c6ac17a3e9beb4738f69558d740995d45eaccfdd557a44fa02d3ebfdbbf4845d8e9f9c
6
+ metadata.gz: 6fa2789ac0febc6e8dfac1f57d59488d1ab4db39b32c0e529a3fb91240d890abe9021f65db6d539c0d8218dc89204ca284db3b1e302c02d5f2ff785e76d8e9a0
7
+ data.tar.gz: a8d7f9a5446308d2d31fcde7f4de762a262b58a6068ded6b8a60a0787d68001b7f2cd555a7910977ab9c8cf9e8d811cbbb2da76b55aa1d96b26961af3112be75
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # GrpcKit
2
2
 
3
- A kit for creating gRPC server/client.
3
+ __UNDER DEVELOPMENT__
4
+
5
+ A kit for creating [gRPC](https://grpc.io/) server/client.
4
6
 
5
7
  ## Installation
6
8
 
@@ -24,7 +26,32 @@ $ gem install grpc_kit
24
26
 
25
27
  ## Usage
26
28
 
27
- TODO: Write usage instructions here
29
+ More Details in [examples directory](https://github.com/ganmacs/grpc_kit/tree/master/examples).
30
+
31
+ ##### Server
32
+
33
+ ```ruby
34
+ sock = TCPServer.new(50051)
35
+ server = GrpcKit::Server.new
36
+ server.handle(GreeterServer.new)
37
+
38
+ loop do
39
+ conn = sock.accept
40
+ server.run(conn)
41
+ end
42
+ ```
43
+
44
+ ##### Client
45
+
46
+ ```ruby
47
+ stub = Helloworld::Greeter::Stub.new('localhost', 50051)
48
+ message = stub.say_hello(Helloworld::HelloRequest.new(name: 'your name')).message
49
+ puts message
50
+ ```
51
+
52
+ ## Requirements
53
+
54
+ * [nghttp2](https://nghttp2.org/)
28
55
 
29
56
  ## Development
30
57
 
@@ -17,9 +17,8 @@ sock = TCPServer.new(50051)
17
17
 
18
18
  server = GrpcKit::Server.new
19
19
  server.handle(GreeterServer.new)
20
- server.run
21
20
 
22
21
  loop do
23
22
  conn = sock.accept
24
- server.session_start(conn)
23
+ server.run(conn)
25
24
  end
@@ -110,9 +110,8 @@ end
110
110
 
111
111
  server = GrpcKit::Server.new(**opts)
112
112
  server.handle(Server.new)
113
- server.run
114
113
 
115
114
  loop do
116
115
  conn = sock.accept
117
- server.session_start(conn)
116
+ server.run(conn)
118
117
  end
@@ -22,27 +22,27 @@ module GrpcKit
22
22
  end
23
23
 
24
24
  def request_response(rpc, request, opts = {})
25
- GrpcKit.logger.info('Calling request_respose')
25
+ GrpcKit.logger.debug('Calling request_respose')
26
26
 
27
27
  rpc.config.interceptor.interceptors = @interceptors
28
28
  do_request(rpc, request, opts)
29
29
  end
30
30
 
31
31
  def client_streamer(rpc, opts = {})
32
- GrpcKit.logger.info('Calling client_streamer')
32
+ GrpcKit.logger.debug('Calling client_streamer')
33
33
  rpc.config.interceptor.interceptors = @interceptors
34
34
  do_request(rpc, nil, opts)
35
35
  end
36
36
 
37
37
  def server_streamer(rpc, request, opts = {})
38
- GrpcKit.logger.info('Calling server_streamer')
38
+ GrpcKit.logger.debug('Calling server_streamer')
39
39
  rpc.config.interceptor.interceptors = @interceptors
40
40
  do_request(rpc, request, opts)
41
41
  end
42
42
 
43
43
  def bidi_streamer(rpc, requests, opts = {})
44
44
  rpc.config.interceptor.interceptors = @interceptors
45
- GrpcKit.logger.info('Calling bidi_streamer')
45
+ GrpcKit.logger.debug('Calling bidi_streamer')
46
46
  end
47
47
 
48
48
  private
@@ -9,6 +9,7 @@ module GrpcKit
9
9
  @sessions = []
10
10
  @rpc_descs = {}
11
11
  @interceptors = interceptors
12
+ @mutex = Mutex.new
12
13
  end
13
14
 
14
15
  # @params handler [object]
@@ -22,27 +23,20 @@ module GrpcKit
22
23
  end
23
24
  end
24
25
 
25
- def run
26
- GrpcKit.logger.info("Start grpc_kit v#{GrpcKit::VERSION}")
27
-
28
- @rpc_descs.freeze
29
- end
30
-
31
- def stop
32
- GrpcKit.logger.info('Stop grpc_kit')
33
- @sessions.each(&:stop)
26
+ def run(conn)
27
+ GrpcKit.logger.debug("Run grpc_kit(v#{GrpcKit::VERSION})")
28
+ establish_session(conn) do |s|
29
+ s.submit_settings([])
30
+ s.start
31
+ end
34
32
  end
35
33
 
36
- def session_start(conn)
37
- session = GrpcKit::Session::Server.new(
38
- GrpcKit::Session::IO.new(conn),
39
- self,
40
- )
41
- @sessions << session
34
+ def shutdown
35
+ GrpcKit.logger.debug('Shutdown grpc_kit')
42
36
 
43
- session.submit_settings([])
44
- session.start # blocking
45
- session.finish
37
+ @mutex.synchronize do
38
+ @sessions.each(&:finish)
39
+ end
46
40
  end
47
41
 
48
42
  def dispatch(stream, session)
@@ -53,5 +47,17 @@ module GrpcKit
53
47
 
54
48
  rpc.invoke(stream, session)
55
49
  end
50
+
51
+ private
52
+
53
+ def establish_session(conn)
54
+ session = GrpcKit::Session::Server.new(GrpcKit::Session::IO.new(conn), self)
55
+ begin
56
+ @mutex.synchronize { @sessions << session }
57
+ yield(session)
58
+ ensure
59
+ @mutex.synchronize { @sessions.delete(session) }
60
+ end
61
+ end
56
62
  end
57
63
  end
@@ -39,6 +39,8 @@ module GrpcKit
39
39
 
40
40
  run_once
41
41
  end
42
+ rescue Errno::ECONNRESET, IOError
43
+ finish
42
44
  end
43
45
 
44
46
  def run_once
@@ -17,11 +17,11 @@ module GrpcKit
17
17
  raise "Invalid format: too short #{value}"
18
18
  end
19
19
 
20
- unit = value[(size - 1)..size]
20
+ unit = value.slice!(-1, 1)
21
21
  d = Duration.new(0, 0, 0, 0)
22
- n = Integer(value[0..size])
22
+ n = Integer(value)
23
23
 
24
- case u
24
+ case unit
25
25
  when 'H'
26
26
  d.sec = n * HOUR
27
27
  when 'M'
@@ -35,7 +35,7 @@ module GrpcKit
35
35
  when 'n'
36
36
  d.nsec = n
37
37
  else
38
- raise "Invalid unit `#{u}`: #{unit} "
38
+ raise "Invalid unit `#{unit}`: #{value + unit} "
39
39
  end
40
40
  d
41
41
  end
@@ -45,7 +45,7 @@ module GrpcKit
45
45
  when 'grpc-status'
46
46
  self.grpc_status = val.to_i
47
47
  when 'grpc-timeout'
48
- self.timeout = Duration.decod(v)
48
+ self.timeout = Duration.decode(val)
49
49
  when 'grpc-message'
50
50
  # TODO
51
51
  GrpcKit.logger.warn('grpc-message is unsupported header now')
@@ -36,6 +36,8 @@ module GrpcKit
36
36
  unless IO.select(nil, [io], nil, 1)
37
37
  raise 'timeout writing data'
38
38
  end
39
+ rescue IOError => e
40
+ raise IOError, e # TODO
39
41
  end
40
42
 
41
43
  data = data.byteslice(remain..-1)
@@ -36,6 +36,8 @@ module GrpcKit
36
36
 
37
37
  run_once
38
38
  end
39
+ rescue Errno::ECONNRESET, IOError
40
+ finish
39
41
  end
40
42
 
41
43
  def run_once
@@ -50,10 +52,6 @@ module GrpcKit
50
52
  end
51
53
  end
52
54
 
53
- def stop
54
- @stop = true
55
- end
56
-
57
55
  def finish
58
56
  stop
59
57
  @io.close
@@ -61,6 +59,10 @@ module GrpcKit
61
59
 
62
60
  private
63
61
 
62
+ def stop
63
+ @stop = true
64
+ end
65
+
64
66
  def invoke_handler
65
67
  while (stream = @inflights.pop)
66
68
  @handler.dispatch(stream, self)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GrpcKit
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.2'
5
5
  end
data/lib/grpc_kit.rb CHANGED
@@ -8,7 +8,7 @@ require 'grpc_kit/client'
8
8
 
9
9
  module GrpcKit
10
10
  def self.logger
11
- @logger ||= Logger.new(STDOUT, level: :debug) # TODO: use :info level
11
+ @logger ||= Logger.new(STDOUT, level: :debug)
12
12
  end
13
13
 
14
14
  def self.logger=(logger)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grpc_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - ganmacs
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-18 00:00:00.000000000 Z
11
+ date: 2018-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ds9