gritz-native 0.5.0 → 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: 9f9935b25f48cab22b5894c8333f99c0685215de5aadeda73458e4d38530ad3a
4
- data.tar.gz: 88c50b7d8f68b9e1b6f22db5df05ec1ca549cc3ae3db41aa0a7518d8671986c9
3
+ metadata.gz: '08bc2d133b38d3a10b68cdd7b90b88b90b92feab800f88182b90bb47ff98c9f8'
4
+ data.tar.gz: e8e9cef39fc6f58e0e485475a3eb38d7b220a050a7405f21e4e05fd6598b53fb
5
5
  SHA512:
6
- metadata.gz: 1558d382904a12cc19d224df061d43dda12641d8e241bb9bce9d4c82995a9fab4823a7bf763b72d4547ccb5016bdfe2cb534ec60bdb04cb452b8e47fba7d3603
7
- data.tar.gz: 22edc7681709a4da4be50ec22406f0dbb6e3e1bf1cdda2e7dd10b90c98f1ff2fe698f641cf9e402c75cea3011c9a5fbcea5919acf93159ff7eb2db0c758e73cb
6
+ metadata.gz: ebbddc36eb61c599bde8d880310f258ddac31093691f889748b724081401e1977834f0c15ffe23e475bfe403d71ad398f5bacd27fd604da1ae18bcbdf5e01728
7
+ data.tar.gz: 2b8846ea8f29f8e2802e940fa3691943ab044a6cd3d802c825dfef096acba4e545c8b5ca664891270521270168393a17822626a30cb15cd3f9cc458ce16b3d83
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.6.0
4
+
5
+ - Support gritz-core 0.6.0 and its shared real-server helper, preserving `Gritz::Testing::Server` and Native RPC behavior.
6
+
3
7
  ## 0.5.0
4
8
 
5
9
  - Discover registered RPCs and protobuf types through gRPC Reflection v1 and v1alpha when `reflection` is enabled.
data/README.md CHANGED
@@ -8,7 +8,7 @@ Requires CRuby 3.3 or later and grpc 1.83 or later. Linux and macOS are tested.
8
8
  require "gritz/native"
9
9
  ```
10
10
 
11
- The entry point loads `gritz-core` and registers `Gritz::Transport::Native`. The configuration value is `transport :native`. Use [gritz](https://github.com/gritzrpc/gritz) for the default combination and executable. The Fiber adapter `gritz-async` is planned separately.
11
+ The entry point loads `gritz-core` and registers `Gritz::Transport::Native`. The configuration value is `transport :native`. Use [gritz](https://github.com/gritzrpc/gritz) for the default combination and executable. The experimental [gritz-async](https://github.com/gritzrpc/gritz-async) adapter provides Fiber execution and inherited listeners separately.
12
12
 
13
13
  The adapter also connects `Gritz::Client.define` to all four RPC forms, sharing channels within each worker and creating fresh connections after fork. It cancels unfinished streams, decodes rich downstream errors, and passes retry/load-balancing configuration to C-core. See the [client guide](https://github.com/gritzrpc/gritz-core/blob/main/docs/guides/clients.md).
14
14
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gritz
4
4
  module Native
5
- VERSION = "0.5.0"
5
+ VERSION = "0.6.0"
6
6
  end
7
7
  end
data/lib/gritz/native.rb CHANGED
@@ -13,6 +13,6 @@ require_relative "transport/native/bridge"
13
13
  require_relative "transport/native/server"
14
14
  require_relative "transport/native/health"
15
15
  require_relative "transport/native/client"
16
- require_relative "testing/server"
16
+ require "gritz/testing/server"
17
17
 
18
18
  Gritz::Client.adapter = Gritz::Transport::Native::Client
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gritz-native
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yudai Takada
@@ -35,14 +35,14 @@ dependencies:
35
35
  requirements:
36
36
  - - '='
37
37
  - !ruby/object:Gem::Version
38
- version: 0.5.0
38
+ version: 0.6.0
39
39
  type: :runtime
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
42
42
  requirements:
43
43
  - - '='
44
44
  - !ruby/object:Gem::Version
45
- version: 0.5.0
45
+ version: 0.6.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: grpc
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -77,7 +77,6 @@ files:
77
77
  - lib/gritz/native.rb
78
78
  - lib/gritz/native/fork_guard.rb
79
79
  - lib/gritz/native/version.rb
80
- - lib/gritz/testing/server.rb
81
80
  - lib/gritz/transport/native.rb
82
81
  - lib/gritz/transport/native/bridge.rb
83
82
  - lib/gritz/transport/native/call.rb
@@ -1,93 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "logger"
4
-
5
- module Gritz
6
- module Testing
7
- # Starts a single-process server for integration tests.
8
- # @api public
9
- class Server
10
- attr_reader :port, :address, :transport
11
-
12
- def self.start(config = nil, controllers: nil, middleware: nil, logger: Logger.new(File::NULL))
13
- config ||= Configuration.new.tap do |settings|
14
- settings.workers = 0
15
- settings.bind = "127.0.0.1:0"
16
- end
17
- config.controllers = controllers if controllers
18
- config.middleware = middleware if middleware
19
- server = new(config, logger:).start
20
- return server unless block_given?
21
-
22
- begin
23
- yield server
24
- ensure
25
- server.stop
26
- end
27
- end
28
-
29
- def initialize(config, logger:)
30
- @config = config
31
- @logger = logger
32
- config.validate_single_process!
33
- end
34
-
35
- def start
36
- raise ArgumentError, "Testing::Server is already started or stopped" if @started || @stopped
37
-
38
- @started = true
39
- begin
40
- @config.preload! if @config.preload_app?
41
- router = Router.new(controllers: @config.controllers, strict: @config.strict_routes, logger: @logger)
42
- @lifecycle_started = true
43
- @config.run_hooks(:on_worker_boot, 0)
44
- @recorder = @config.metrics_recorder_factory&.call(worker: 0)
45
- dispatcher = Dispatcher.new(router:, middleware: @config.middleware, logger: @logger, metrics: @recorder)
46
- @transport = Transport::Native.new(config: @config, dispatcher:, logger: @logger)
47
- @port = transport.bind
48
- @address = @config.bind.sub(/:\d+\z/, ":#{port}")
49
- transport.start
50
- unless @config.health_checks.empty?
51
- @health_stop = Queue.new
52
- @health_thread = Thread.new do
53
- transport.refresh_health until @health_stop.pop(timeout: @config.status_interval)
54
- end
55
- end
56
- self
57
- rescue StandardError
58
- stop
59
- raise
60
- end
61
- end
62
-
63
- def stop
64
- return if @stopped
65
-
66
- @stopped = true
67
- deadline = monotonic + @config.shutdown_timeout
68
- begin
69
- @health_stop&.push(true)
70
- if @health_thread && !@health_thread.join([deadline - monotonic, 0].max)
71
- @health_thread.kill.join
72
- end
73
- transport&.stop(deadline: Time.now + [deadline - monotonic, 0].max)
74
- ensure
75
- begin
76
- @config.run_hooks(:on_worker_shutdown, 0) if @lifecycle_started
77
- ensure
78
- begin
79
- @recorder&.observe_rejected(transport.stats.fetch(:rejected_total, 0)) if transport
80
- @recorder&.observe_worker({ pid: Process.pid, index: 0, state: "stopped" })
81
- ensure
82
- @recorder&.close(timeout: [deadline - monotonic, 0].max)
83
- end
84
- end
85
- end
86
- end
87
-
88
- private
89
-
90
- def monotonic = Process.clock_gettime(Process::CLOCK_MONOTONIC)
91
- end
92
- end
93
- end