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 +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +1 -1
- data/lib/gritz/native/version.rb +1 -1
- data/lib/gritz/native.rb +1 -1
- metadata +3 -4
- data/lib/gritz/testing/server.rb +0 -93
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '08bc2d133b38d3a10b68cdd7b90b88b90b92feab800f88182b90bb47ff98c9f8'
|
|
4
|
+
data.tar.gz: e8e9cef39fc6f58e0e485475a3eb38d7b220a050a7405f21e4e05fd6598b53fb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|
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
|
|
data/lib/gritz/native/version.rb
CHANGED
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
data/lib/gritz/testing/server.rb
DELETED
|
@@ -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
|