fix(graceful_shutdown): use WithShutdown API in sample - #1133
Conversation
|
我们的每一个sample同时也是集成测试 |
Okay, I will try to add integration test |
a02a773 to
bfdc959
Compare
|
集成测试的逻辑别加在 intergrate test里面 就加在代码里面 就用if或者select判断符不符合预期 不符合就panic就行了 |
|
our project use
|
ok,thanks for your review |
| } | ||
|
|
||
| func (p *GreetProvider) Greet(ctx context.Context, req *greet.GreetRequest) (*greet.GreetResponse, error) { | ||
| if p.shuttingDown.Load() { |
There was a problem hiding this comment.
[P1] 这个本地标志会让集成测试绕过真正的优雅停机拒绝路径。triggerShutdownOnFirstGreet 在发送 SIGINT 前先把 shuttingDown 设为 true,第二个短连接请求即使穿过 Dubbo 的 provider graceful-shutdown filter,也会在这里由样例代码直接返回错误;客户端只统计 1 次成功和 1 次失败,所以框架的 RejectRequest 阶段失效时测试仍可通过。当前 CI 只显示该 sample 退出成功,client/server 日志被重定向,无法区分错误来源。请去掉应用层拒绝,改为在框架进入拒绝阶段后由独立客户端发起请求,并断言请求没有进入 Greet handler,同时保留在途请求完成的断言。
There was a problem hiding this comment.
[P1] 当前修复仍未覆盖停机阶段的拒绝切换。第二阶段通过 -reject-request=true 在 server 启动前直接执行 WithRejectRequest(),随后没有发送 SIGINT;第一阶段又只有一个在途请求,没有停机后的新请求。因此即使删除 Dubbo-Go waitForSendingAndReceivingRequests() 中真正把 RejectRequest 从 false 置为 true 的逻辑,这个测试仍会通过。请在同一次真实停机中,等待 SIGINT 后框架进入拒绝阶段,再由独立客户端发起新请求并断言未进入 Greet handler;回归测试必须能检出移除该状态切换的实现。
There was a problem hiding this comment.
[P1] 当前 Head ed5613e 仍可复现这个根因。我在 WSL / Go 1.25.1 的隔离副本中删除了 Dubbo-Go 387ea9a 的 waitForSendingAndReceivingRequests 内唯一一处 shutdown.RejectRequest.Store(true),再运行 bash ./integrate_test.sh graceful_shutdown,脚本仍以 0 退出,并完整打印 Triggering graceful_shutdown、reject-stage probe 和 integration completed。原因是第二阶段通过 -reject-request=true 在新进程启动时预置拒绝状态,而第一阶段收到 SIGINT 后没有发起新请求,所以测试无法检出真实停机状态切换缺失。请在同一服务进程收到 SIGINT 后发起独立新请求,断言它未进入 Greet handler,并移除用 WithRejectRequest 预置结果的第二阶段。
8c39294 to
47f6da1
Compare
aa5da24 to
9fbbaa8
Compare
|
I have fixed CI😀 |
|
新增修改:
|
变更说明
更新
graceful_shutdownsample,使其使用当前推荐的dubbo.WithShutdown(...)配置方式。该 PR 主要解决 sample 仍使用旧的
graceful_shutdown.Init(...)初始化方式的问题,并同步更新文档和集成测试说明。问题原因
graceful_shutdownsample 原先通过graceful_shutdown.Init(...)配置优雅停机。当前 Dubbo-go 推荐通过
dubbo.WithShutdown(...)在dubbo.NewInstance(...)中配置 graceful shutdown。如果 sample 继续保留旧写法,用户容易参考到不推荐的 API,也会和当前文档中的新 API 使用方式不一致。修复方案
graceful_shutdown.Init(...)替换为dubbo.WithShutdown(...)dubbo.NewInstance(...)创建 Dubbo 实例WithTimeout、WithStepTimeout、WithNotifyTimeout、WithConsumerUpdateWaitTime和WithOfflineRequestWindowTimeout-notify-timeoutserver 参数,并同步更新 README / README_CNgraceful_shutdownsample 覆盖 Triple 长连接场景下的 graceful shutdown 行为验证
go test ./graceful_shutdown/...git diff --checkFixes #1132