# SC312：请求结束过早，无法测试拒绝

> SC312（请求结束过早，无法测试拒绝）表示排空期间还没来得及发出新请求，进行中的工作就已经结束。改用运行时间更长的测试请求。

Source: https://shutdown.jscrate.dev/zh/docs/codes/sc312
Last updated: 2026-09-23

`SC312` 表示 shutdown-check 还没发送新请求，进行中的测试请求就已经结束了。没有仍在排空的旧工作，测试就无法证明服务在排空期间如何处理流量。

| | |
| --- | --- |
| 诊断码 | `SC312` (FAIL) |
| 阶段 | 排空流量 |
| CLI 退出码 | 1 |
| 含义 | 到了该发送新请求的时候，进行中的工作已经结束，因此观察不到排空期间的拒绝行为。 |
| 输出信息 | `Work finished before new-request rejection could be checked; use a longer-running workload` |
| 首先检查 | 使用运行时间更长的测试请求，确保发送新请求时旧工作仍在排空。 |

## 如何修复？

1. 让可控的测试请求运行得更久。
2. 收到 `SIGTERM` 后立即撤回就绪状态。
3. 去掉修改就绪状态之前不必要的延迟。
4. 让新请求的路由足够快，能在截止时间前返回。

测试请求要持续足够长的时间，让就绪检查轮询和新请求都能完成，同时仍能在 `shutdown.deadlineMs` 之前从容结束。

不要为了掩盖时序问题就关掉拒绝检查。如果你的生产平台在关闭期间仍可能转发流量，保留这项检查，并让测试的时间窗口稳定可靠。

## 如何确认已修复？

修复后的顺序是：先 `readiness withdrawn`，再 `new request rejected`，最后 `work request finished`。在 CI 上多运行几次，确认在负载下旧工作不会先结束。

如果撤回就绪状态本身就很慢，修正这个状态切换，而不是给测试请求加上过长的人为延迟。

## 相关内容

- [测试流量排空](https://shutdown.jscrate.dev/zh/docs/guides/readiness-and-draining)
- [选择合适的测试请求](https://shutdown.jscrate.dev/zh/docs/in-flight-work)
- [SC311：接受了新请求](https://shutdown.jscrate.dev/zh/docs/codes/sc311)
