grpc_kit 0.5.1 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 854c24c4b4668ac76230b5c262893ae24f66ea7c644e1b46389e2546783004f6
4
- data.tar.gz: 5b3cc154a4fbed3ebabffc62611b328a26f8d4006f692b15c397ce292880171f
3
+ metadata.gz: de4d68a25b47aecdb39e3c3b35f7b53fe85215ababa7a18a2811069b41af3ba8
4
+ data.tar.gz: f330329e794c5b799d265c7c4869da26373467bb64dd6cc273b314c1aeffd509
5
5
  SHA512:
6
- metadata.gz: ba44498c88cb8040c2b6cc9bbc183f7d452f72b47496cdde90c26ae3e72a60496ee47ec2c2fc5659c44ca5ab0ab32bd2f4fa9ecd727cf2ea3096b708d15eefcc
7
- data.tar.gz: b9ef8c8d03788525a4927d93ed38c66afffc58eaef70865c152a04f0dbe5936d1edabde8357dfb8db8b70b38a0e31b0edc7d2321882eb2a2290f726a607cbfd7
6
+ metadata.gz: 38586d8ab0d0f252b0819b71b8422f8396661223f6b9014d98623abce41fba285e6975bb0e7655d10d45112f1972cdd992c3c06f7ba2557a9c3f898e429abdd1
7
+ data.tar.gz: 99f95947b101ceaf8994777fe425951977ec222a6fb5aba6baed9f913a701a164ccb548d80e30199bafb27cb847af1f9464c649321d5979719f545a6062b9b28
@@ -1,5 +1,5 @@
1
1
  name: ci
2
- on:
2
+ on:
3
3
  push:
4
4
  branches:
5
5
  - master
@@ -11,12 +11,24 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  strategy:
13
13
  matrix:
14
- ruby_version:
15
- - 2.5
16
- - 2.6
17
- - 2.7
14
+ ruby_version: ['3.3', '3.4', '4.0']
18
15
  steps:
19
- - uses: actions/checkout@v2
16
+ - uses: actions/checkout@v7
17
+ - uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: '${{ matrix.ruby_version }}'
20
+ bundler-cache: true
21
+
22
+ - run: 'bundle exec rake'
23
+
24
+ truffleruby:
25
+ name: truffleruby
26
+ runs-on: ubuntu-latest
27
+ strategy:
28
+ matrix:
29
+ ruby_version: [truffleruby-head]
30
+ steps:
31
+ - uses: actions/checkout@v7
20
32
  - uses: ruby/setup-ruby@v1
21
33
  with:
22
34
  ruby-version: '${{ matrix.ruby_version }}'
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.6.0 (2026-09-09)
4
+
5
+ - breaking change: Drop Ruby 2.5, 2.6, 2.7, 3.0, 3.1, and 3.2 from CI ([db918cb](https://github.com/cookpad/grpc_kit/commit/db918cbe0ceadf263ff528ace82c90983ee989f2) & [#42](https://github.com/cookpad/grpc_kit/pull/42))
6
+ - bug: Fix tests for Ruby 3+ ([#36](https://github.com/cookpad/grpc_kit/pull/36))
7
+ - bug: Fix exceptions in an auto-trimmer thread in CI build with TruffleRuby ([#38](https://github.com/cookpad/grpc_kit/pull/38))
8
+ - bug: Drain the waker pipe in Session::IO#select ([#41](https://github.com/cookpad/grpc_kit/pull/41))
9
+ - improve: Add TruffleRuby in CI ([#37](https://github.com/cookpad/grpc_kit/pull/37))
10
+ - improve: Add Ruby 3.3, 3.4, 4.0 in CI ([#42](https://github.com/cookpad/grpc_kit/pull/42))
11
+
3
12
  ## v0.5.1 (2021-05-19)
4
13
 
5
14
  - improve: Set END_STREAM flag on the last DATA frame on request stream ([#34](https://github.com/cookpad/grpc_kit/pull/34))
@@ -1,18 +1,16 @@
1
+ # frozen_string_literal: true
1
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
2
3
  # source: helloworld.proto
3
4
 
4
5
  require 'google/protobuf'
5
6
 
6
- Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "helloworld.HelloRequest" do
8
- optional :name, :string, 1
9
- end
10
- add_message "helloworld.HelloReply" do
11
- optional :message, :string, 1
12
- end
13
- end
7
+
8
+ descriptor_data = "\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2I\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x30\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\x62\x06proto3"
9
+
10
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
11
+ pool.add_serialized_file(descriptor_data)
14
12
 
15
13
  module Helloworld
16
- HelloRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("helloworld.HelloRequest").msgclass
17
- HelloReply = Google::Protobuf::DescriptorPool.generated_pool.lookup("helloworld.HelloReply").msgclass
14
+ HelloRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("helloworld.HelloRequest").msgclass
15
+ HelloReply = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("helloworld.HelloReply").msgclass
18
16
  end
@@ -1,20 +1,37 @@
1
1
  # Generated by the protocol buffer compiler. DO NOT EDIT!
2
2
  # Source: helloworld.proto for package 'helloworld'
3
+ # Original file comments:
4
+ # Copyright 2015 gRPC authors.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
3
18
 
4
19
  require 'grpc'
5
20
  require 'helloworld_pb'
6
21
 
7
22
  module Helloworld
8
23
  module Greeter
24
+ # The greeting service definition.
9
25
  class Service
10
26
 
11
- include GRPC::GenericService
27
+ include ::GRPC::GenericService
12
28
 
13
29
  self.marshal_class_method = :encode
14
30
  self.unmarshal_class_method = :decode
15
31
  self.service_name = 'helloworld.Greeter'
16
32
 
17
- rpc :SayHello, HelloRequest, HelloReply
33
+ # Sends a greeting
34
+ rpc :SayHello, ::Helloworld::HelloRequest, ::Helloworld::HelloReply
18
35
  end
19
36
 
20
37
  Stub = Service.rpc_stub_class
@@ -4,7 +4,6 @@ $LOAD_PATH.unshift File.expand_path('./examples/helloworld')
4
4
 
5
5
  require 'grpc_kit'
6
6
  require 'socket'
7
- require 'pry'
8
7
  require 'helloworld_services_pb'
9
8
 
10
9
  HOST = 'localhost'
@@ -4,7 +4,6 @@ $LOAD_PATH.unshift File.expand_path('./examples/helloworld')
4
4
 
5
5
  require 'grpc_kit'
6
6
  require 'socket'
7
- require 'pry'
8
7
  require 'helloworld_services_pb'
9
8
 
10
9
  class GreeterServer < Helloworld::Greeter::Service
@@ -1,37 +1,19 @@
1
+ # frozen_string_literal: true
1
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
2
3
  # source: routeguide.proto
3
4
 
4
5
  require 'google/protobuf'
5
6
 
6
- Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "routeguide.Point" do
8
- optional :latitude, :int32, 1
9
- optional :longitude, :int32, 2
10
- end
11
- add_message "routeguide.Rectangle" do
12
- optional :lo, :message, 1, "routeguide.Point"
13
- optional :hi, :message, 2, "routeguide.Point"
14
- end
15
- add_message "routeguide.Feature" do
16
- optional :name, :string, 1
17
- optional :location, :message, 2, "routeguide.Point"
18
- end
19
- add_message "routeguide.RouteNote" do
20
- optional :location, :message, 1, "routeguide.Point"
21
- optional :message, :string, 2
22
- end
23
- add_message "routeguide.RouteSummary" do
24
- optional :point_count, :int32, 1
25
- optional :feature_count, :int32, 2
26
- optional :distance, :int32, 3
27
- optional :elapsed_time, :int32, 4
28
- end
29
- end
7
+
8
+ descriptor_data = "\n\x10routeguide.proto\x12\nrouteguide\",\n\x05Point\x12\x10\n\x08latitude\x18\x01 \x01(\x05\x12\x11\n\tlongitude\x18\x02 \x01(\x05\"I\n\tRectangle\x12\x1d\n\x02lo\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x1d\n\x02hi\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"<\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x08location\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"A\n\tRouteNote\x12#\n\x08location\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x0f\n\x07message\x18\x02 \x01(\t\"b\n\x0cRouteSummary\x12\x13\n\x0bpoint_count\x18\x01 \x01(\x05\x12\x15\n\rfeature_count\x18\x02 \x01(\x05\x12\x10\n\x08\x64istance\x18\x03 \x01(\x05\x12\x14\n\x0c\x65lapsed_time\x18\x04 \x01(\x05\x32\x85\x02\n\nRouteGuide\x12\x36\n\nGetFeature\x12\x11.routeguide.Point\x1a\x13.routeguide.Feature\"\x00\x12>\n\x0cListFeatures\x12\x15.routeguide.Rectangle\x1a\x13.routeguide.Feature\"\x00\x30\x01\x12>\n\x0bRecordRoute\x12\x11.routeguide.Point\x1a\x18.routeguide.RouteSummary\"\x00(\x01\x12?\n\tRouteChat\x12\x15.routeguide.RouteNote\x1a\x15.routeguide.RouteNote\"\x00(\x01\x30\x01\x42\x30\n\x1bio.grpc.examples.routeguideB\x0fRouteGuideProtoP\x01\x62\x06proto3"
9
+
10
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
11
+ pool.add_serialized_file(descriptor_data)
30
12
 
31
13
  module Routeguide
32
- Point = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Point").msgclass
33
- Rectangle = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Rectangle").msgclass
34
- Feature = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Feature").msgclass
35
- RouteNote = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.RouteNote").msgclass
36
- RouteSummary = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.RouteSummary").msgclass
14
+ Point = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Point").msgclass
15
+ Rectangle = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Rectangle").msgclass
16
+ Feature = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Feature").msgclass
17
+ RouteNote = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.RouteNote").msgclass
18
+ RouteSummary = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.RouteSummary").msgclass
37
19
  end
@@ -24,7 +24,7 @@ module Routeguide
24
24
  # Interface exported by the server.
25
25
  class Service
26
26
 
27
- include GRPC::GenericService
27
+ include ::GRPC::GenericService
28
28
 
29
29
  self.marshal_class_method = :encode
30
30
  self.unmarshal_class_method = :decode
@@ -36,24 +36,24 @@ module Routeguide
36
36
  #
37
37
  # A feature with an empty name is returned if there's no feature at the given
38
38
  # position.
39
- rpc :GetFeature, Point, Feature
39
+ rpc :GetFeature, ::Routeguide::Point, ::Routeguide::Feature
40
40
  # A server-to-client streaming RPC.
41
41
  #
42
42
  # Obtains the Features available within the given Rectangle. Results are
43
43
  # streamed rather than returned at once (e.g. in a response message with a
44
44
  # repeated field), as the rectangle may cover a large area and contain a
45
45
  # huge number of features.
46
- rpc :ListFeatures, Rectangle, stream(Feature)
46
+ rpc :ListFeatures, ::Routeguide::Rectangle, stream(::Routeguide::Feature)
47
47
  # A client-to-server streaming RPC.
48
48
  #
49
49
  # Accepts a stream of Points on a route being traversed, returning a
50
50
  # RouteSummary when traversal is completed.
51
- rpc :RecordRoute, stream(Point), RouteSummary
51
+ rpc :RecordRoute, stream(::Routeguide::Point), ::Routeguide::RouteSummary
52
52
  # A Bidirectional streaming RPC.
53
53
  #
54
54
  # Accepts a stream of RouteNotes sent while a route is being traversed,
55
55
  # while receiving other RouteNotes (e.g. from other users).
56
- rpc :RouteChat, stream(RouteNote), stream(RouteNote)
56
+ rpc :RouteChat, stream(::Routeguide::RouteNote), stream(::Routeguide::RouteNote)
57
57
  end
58
58
 
59
59
  Stub = Service.rpc_stub_class
@@ -3,8 +3,8 @@
3
3
  $LOAD_PATH.unshift File.expand_path('./examples/routeguide')
4
4
 
5
5
  require 'grpc_kit'
6
- require 'pry'
7
6
  require 'json'
7
+ require 'socket'
8
8
  require 'routeguide_services_pb'
9
9
 
10
10
  RESOURCE_PATH = './examples/routeguide/routeguide.json'
@@ -48,7 +48,7 @@ def record_route(stub, size)
48
48
  JSON.parse(f.read)
49
49
  end
50
50
 
51
- stream = stub.record_route({})
51
+ stream = stub.record_route
52
52
 
53
53
  size.times do
54
54
  location = features.sample['location']
@@ -3,8 +3,8 @@
3
3
  $LOAD_PATH.unshift File.expand_path('./examples/routeguide')
4
4
 
5
5
  require 'grpc_kit'
6
- require 'pry'
7
6
  require 'json'
7
+ require 'socket'
8
8
  require 'routeguide_services_pb'
9
9
 
10
10
  class Server < Routeguide::RouteGuide::Service
data/grpc_kit.gemspec CHANGED
@@ -25,10 +25,11 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency 'ds9', '>= 1.4.0'
26
26
  spec.add_dependency 'google-protobuf', '>= 3.7.0'
27
27
  spec.add_dependency 'googleapis-common-protos-types', '>= 1.0.2'
28
+ spec.add_dependency 'logger'
28
29
 
29
30
  spec.add_development_dependency 'bundler'
30
31
  spec.add_development_dependency 'grpc-tools', '~> 1.18.0'
31
- spec.add_development_dependency 'pry-byebug'
32
+ spec.add_development_dependency 'irb'
32
33
  spec.add_development_dependency 'rake'
33
34
  spec.add_development_dependency 'rspec'
34
35
  spec.add_development_dependency 'rubocop'
@@ -17,9 +17,6 @@ module GrpcKit
17
17
  @rpcs = rpcs
18
18
  @max_pool_size = max
19
19
  @min_pool_size = min
20
- unless max == min
21
- @auto_trimmer = AutoTrimmer.new(self, interval: interval).tap(&:start!)
22
- end
23
20
 
24
21
  @shutdown = false
25
22
  @tasks = Queue.new
@@ -28,6 +25,10 @@ module GrpcKit
28
25
  @mutex = Mutex.new
29
26
 
30
27
  @min_pool_size.times { spawn_thread }
28
+
29
+ unless max == min
30
+ @auto_trimmer = AutoTrimmer.new(self, interval: interval).tap(&:start!)
31
+ end
31
32
  end
32
33
 
33
34
  # @param task [Object] task to dispatch
@@ -45,7 +45,7 @@ module GrpcKit
45
45
  end
46
46
 
47
47
  # Blocking until io object is readable
48
- # @return [void]
48
+ # @return [Boolean] false when the io object is already closed
49
49
  def wait_readable
50
50
  ::IO.select([@io], [], [])
51
51
  true
@@ -54,10 +54,12 @@ module GrpcKit
54
54
  end
55
55
 
56
56
  # Blocking until io object is readable or writable
57
- # @return [void]
57
+ # @param timeout [Integer, Float, nil] seconds to wait, or nil to block forever
58
+ # @param write [Boolean] whether to wait for writability as well
59
+ # @return [Array(Array<::IO>, Array<::IO>)] readable ios and writable ios, both empty on timeout.
58
60
  def select(timeout: 1, write: true)
59
61
  rs, ws = ::IO.select([@io, @wake_o], write ? [@io] : [], [], timeout)
60
- @wake_o.read(@wake_o.stat.size) if rs&.delete(@wake_o) && !@wake_o.closed?
62
+ drain_waker if rs&.delete(@wake_o)
61
63
  [rs || [], ws || []]
62
64
  end
63
65
 
@@ -74,6 +76,18 @@ module GrpcKit
74
76
  def flush
75
77
  @io.flush
76
78
  end
79
+
80
+ private
81
+
82
+ # @return [void]
83
+ def drain_waker
84
+ return if @wake_o.closed?
85
+
86
+ loop do
87
+ data = @wake_o.read_nonblock(4096, exception: false)
88
+ break if [:wait_readable, nil].include?(data) # EAGAIN, EWOULDBLOCK, or EOF
89
+ end
90
+ end
77
91
  end
78
92
  end
79
93
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GrpcKit
4
- VERSION = '0.5.1'
4
+ VERSION = '0.6.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grpc_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuta Iwama
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2021-05-19 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: ds9
@@ -52,6 +51,20 @@ dependencies:
52
51
  - - ">="
53
52
  - !ruby/object:Gem::Version
54
53
  version: 1.0.2
54
+ - !ruby/object:Gem::Dependency
55
+ name: logger
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
55
68
  - !ruby/object:Gem::Dependency
56
69
  name: bundler
57
70
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +94,7 @@ dependencies:
81
94
  - !ruby/object:Gem::Version
82
95
  version: 1.18.0
83
96
  - !ruby/object:Gem::Dependency
84
- name: pry-byebug
97
+ name: irb
85
98
  requirement: !ruby/object:Gem::Requirement
86
99
  requirements:
87
100
  - - ">="
@@ -237,7 +250,6 @@ homepage: https://github.com/ganmacs/grpc_kit
237
250
  licenses:
238
251
  - MIT
239
252
  metadata: {}
240
- post_install_message:
241
253
  rdoc_options: []
242
254
  require_paths:
243
255
  - lib
@@ -252,8 +264,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
252
264
  - !ruby/object:Gem::Version
253
265
  version: '0'
254
266
  requirements: []
255
- rubygems_version: 3.1.4
256
- signing_key:
267
+ rubygems_version: 4.0.19
257
268
  specification_version: 4
258
269
  summary: A kit for creating gRPC server/client
259
270
  test_files: []