fix: audit submissions disabled after bind
This commit is contained in:
@@ -3995,3 +3995,11 @@ git diff --check
|
||||
- 企业应用`inactive/deleted`、企业`inactive/deleted`四次新连接均返回CMPP Bind状态3并断开,未创建短信记录。bind后再停用的严格复验同样拦截发送;此前两次跨机器时间未校准的尝试虽送达并计费,但无法证明配置变更早于Submit,明确作废且不用于判断。严格复验暴露`P0-SEND-AUDIT-001`:应用或企业停用后,参数合法Submit返回非零SubmitResp,且测试号码`13800389700/13800389800`均没有`SmsMessageRecord`、失败回执或下游投递;这与`TC-SEND-037`要求“已鉴权合法Submit先返回成功并留痕,再以REJECTD业务失败”冲突。当前单元测试反而断言同步拒绝且不落库,说明需求、测试和实现口径已漂移,需先确认权威语义再修复,不能把“拦截生效”冒充完整失败审计闭环。
|
||||
- 通道行为通过:仅`LGST-M-P`停用时,`MSG-94d30de8-78cb-48a4-bdbf-e6ef6dd2fb93`、`MSG-22f26498-0289-4b79-aa0c-a1fa54bb0b99`自动改走`LGST-M-B`并delivered;移动主备同时停用时两条均`failed/ROUTE`、供应商Submit=0、账单=0。确定性故障模拟下,`MSG-c28b231f-2489-41fc-9d0f-6223bc8307bd`和`MSG-a65283b6-9349-4838-a12d-fee2e5ee07ff`先在主通道结果码8/rejected,再创建带`retryOfSubmitRecordId`的备用accepted提交并最终delivered,每条只计费325。
|
||||
- 最终恢复回读:企业/应用active、接口开启、模板模式direct_send、应用单价325、余额1824051;`【LG压测】`审核和汇总报备approved,6/6通道报备approved;六通道active、端口17900、连接6/6,普通模拟器已恢复;每应用两条指定白名单及phase5/phase6六条临时运营商号段规则全部保留,临时频控规则0。Inbox仅completed、Submit Outbox仅published,命令/结果/协议日志Stream均pending0/lag0,业务BullMQ wait/active/delayed/failed/prioritized均0,遗留`gateway.submit.queue` wait仍为84119且未增长;数据库未授予锁0、idle transaction0,9项服务active,本轮窗口核心服务error级journal为0。
|
||||
|
||||
## 2026-08-25 P0-SEND-AUDIT-001 本地修复与提交前验证
|
||||
|
||||
- 根因确认有两段:普通路径在应用查询后、快速路径在Inbox合并SQL内,都把应用/企业/接口状态作为SubmitResp同步拒绝条件,导致已鉴权合法Submit在短信记录前退出;即使后续业务状态机生成`ACCOUNT/INTERFACE`失败回执,下游队列仍会因当前`interfaceEnabled=false`直接返回。两处行为共同造成测试号码没有`SmsMessageRecord`、`SmsReceiptRecord`和`CmppDownstreamDelivery`。
|
||||
- 最小修复保留新bind的应用/企业/接口拒绝、账号存在性、IP白名单、`Src_Id`和协议参数校验;已鉴权合法Submit先进入原有持久化流程,普通路径立即、快速路径由Worker按最新状态生成`failed/ACCOUNT`或`failed/INTERFACE`、`undelivered/REJECTD`。仅这两类平台业务失败回执携带窄范围许可,即使资源随后停用/删除或接口关闭,也可创建下游投递并尝试送到原CMPP会话;普通HTTP消息、上行和其他停用资源投递语义未放宽。
|
||||
- 单元回归覆盖接口bind后关闭、应用处于disabling且回执入队时已deleted/interface关闭、快速路径Inbox SQL不再提前检查业务状态,同时确认IP白名单与`Src_Id`校验仍保留;既有“接口关闭时新bind拒绝”和“HTTP-only应用不产生CMPP投递”用例继续通过。
|
||||
- 提交前门禁:API全量45套526项通过;非增量TypeScript正式构建通过且未要求改写用户保留的`tsbuildinfo`;Gateway `go test ./... -count=1`和`go vet ./...`通过;`git diff --check`通过。无数据库迁移、无新增环境变量,部署脚本和环境变量校验无需修改;回滚只需revert本轮代码/文档提交并重新构建。
|
||||
- 本轮按用户授权仅在本地修复和验证,没有部署到测试环境,也没有执行新的短信发送或压力测试;测试环境仍运行旧部署标记`b5005f21d5092b7e2759efdce0ebd02798e4552f+test.phase6.tenant-microbatch.utc.keepalive.connection-race`,恢复资产仍为`/opt/cmpp-platform-backups/phase6-connection-race-20260825T095448Z`。因此P0已由代码和自动化测试验证,但尚未在测试环境重新做真实CMPP闭环验收;预生产/生产未访问,多Gateway P2未实施,未push远端。
|
||||
|
||||
Reference in New Issue
Block a user