shaw
0b6b4ea956
fix(billing-probe): govern the automatic account rate write-back
- 自动写回值域治理与留痕:上游声明值必须 > 0 且 <= 100 才写回。0 会让
accountCost 恒为 0(账号总额/日/周配额与成本告警全部静默失效),极大值可
一次打爆配额并污染成本报表;越界时保持原倍率、记 WARN,探测快照照常记 ok。
写回成功时记结构化 slog(account_id / 旧值 / 新值 / source),并在快照中
新增 synced_rate_multiplier 记录本次写回值——后台任务裸 SQL 不产生
audit_logs,这两处是唯一可追溯来源。管理员手工设 0 不受影响。
- 写回改用 resolved_rate_multiplier(不含高峰的基准倍率):effective 含探测
那一刻的高峰系数,写回会把一个探测周期的峰值/谷值冻结进静态列,而展示与
调度用 upstreamBillingRateAt 按当前时间重算高峰,两者会持续不一致。
- 倍率解析失败不再污染公共探测路径:账号级值域/精度只在该账号已开启同步、
真要写回时才有影响;未开同步的账号照常记 ok 快照,不累计 failure_count、
不进入指数退避。
- 单账号编辑补 service 层守卫:同步开启时拒绝手工倍率(新增
UPSTREAM_BILLING_RATE_SYNC_CONFLICT,与批量路径同族),此前只有前端
disabled 挡人,直接 PUT /admin/accounts/{id} 可写入并活到下次成功探测。
判断的是本次请求生效后的状态,"关同步 + 改倍率"同请求仍然放行。
- 修正开关反推方向:不再由 rate_sync=true 推出 probe=true,否则一条"同步开、
探测键缺失"的僵尸记录会在任意一次无关编辑时静默打开周期性外呼;改为探测
关闭/缺失一律把同步归零。
- 删除死代码 UpdateWithUpstreamBillingProbeEnabled(PR 删接口后生产已无调用
方),其回滚测试改为直接覆盖生产路径 UpdateWithAccountBillingSettings。
upstreamBillingRateSyncEnabled 不再是只服务测试的假门控,现为写回前置过滤,
SQL CAS 仍是权威门控,两侧均加注释说明分工。
- en/zh 文案补充:同步的是不含高峰的基准倍率;开启同步会连带打开自动探测。
2026-08-01 22:11:10 +08:00
..
2026-07-26 13:43:06 +08:00
2026-07-23 15:50:44 +08:00
2026-08-01 22:11:09 +08:00
2026-07-26 01:56:10 +08:00
2026-07-21 05:02:30 -07:00
2026-07-21 05:02:30 -07:00
2026-07-31 16:11:45 +08:00
2026-07-27 15:20:03 +00:00
2026-07-31 21:49:44 +08:00
2026-08-01 22:11:10 +08:00
2026-08-01 22:11:10 +08:00
2026-07-25 12:50:46 +08:00
2026-07-25 12:50:46 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-08-01 22:11:09 +08:00
2026-07-23 09:19:25 +08:00
2026-07-28 17:21:32 +08:00
2026-08-01 22:11:09 +08:00
2026-07-28 17:21:32 +08:00
2026-07-25 22:20:27 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-08-01 22:11:09 +08:00
2026-07-28 17:21:32 +08:00
2026-07-26 20:23:50 +09:00
2026-07-26 20:23:50 +09:00
2026-07-26 20:23:50 +09:00
2026-07-26 20:23:50 +09:00
2026-07-25 12:50:46 +08:00
2026-07-21 11:16:04 +08:00
2026-07-25 12:50:46 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 20:02:52 +08:00
2026-07-23 16:43:18 +08:00
2026-07-26 10:14:55 -04:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-07-25 19:40:53 +08:00
2026-07-28 17:21:32 +08:00
2026-07-25 19:40:53 +08:00
2026-07-28 17:21:32 +08:00
2026-07-20 15:20:51 +08:00
2026-07-20 15:20:51 +08:00
2026-07-24 01:22:34 +08:00
2026-07-24 01:22:34 +08:00
2026-07-24 01:22:34 +08:00
2026-07-24 01:22:34 +08:00
2026-07-24 01:22:34 +08:00
2026-07-24 01:22:34 +08:00
2026-07-25 11:22:42 +08:00
2026-07-31 11:49:30 +08:00
2026-07-31 11:49:30 +08:00
2026-07-21 11:55:38 +08:00
2026-07-21 11:55:38 +08:00
2026-07-28 16:19:41 +08:00
2026-07-28 16:19:41 +08:00
2026-07-23 11:18:10 +08:00
2026-07-23 11:18:10 +08:00
2026-08-01 10:32:43 +08:00
2026-08-01 10:32:43 +08:00
2026-07-25 11:22:42 +08:00
2026-07-25 10:20:50 +08:00
2026-07-23 09:20:18 +08:00
2026-07-23 09:20:18 +08:00
2026-07-25 10:20:50 +08:00
2026-07-23 09:20:18 +08:00
2026-07-31 23:12:22 +08:00
2026-07-31 23:12:22 +08:00
2026-07-31 23:12:22 +08:00
2026-07-31 23:12:22 +08:00
2026-08-01 22:11:09 +08:00
2026-08-01 22:11:09 +08:00
2026-07-30 16:28:19 +08:00
2026-07-28 12:28:46 +08:00
2026-07-28 12:28:46 +08:00
2026-07-31 23:12:02 +08:00
2026-07-31 23:12:02 +08:00
2026-07-31 11:58:28 +08:00
2026-08-01 11:29:58 +08:00
2026-07-27 19:28:45 +08:00
2026-07-26 21:20:37 +08:00
2026-07-26 21:20:37 +08:00
2026-07-20 21:00:29 +08:00
2026-07-20 21:00:29 +08:00
2026-07-27 08:19:19 +08:00
2026-07-27 08:19:19 +08:00
2026-08-01 11:29:58 +08:00
2026-08-01 11:29:58 +08:00
2026-07-25 21:59:20 +07:00
2026-07-20 22:43:11 +08:00
2026-07-27 19:28:45 +08:00
2026-07-27 00:43:53 +08:00
2026-07-23 09:20:18 +08:00
2026-07-23 09:20:52 +08:00
2026-08-01 11:29:58 +08:00
2026-07-23 10:26:58 +08:00
2026-07-27 00:43:53 +08:00
2026-07-24 03:00:26 +08:00
2026-07-31 16:11:45 +08:00
2026-07-26 09:52:47 +08:00
2026-07-27 13:19:00 +09:00
2026-07-31 16:11:45 +08:00
2026-07-31 16:11:45 +08:00
2026-07-31 16:11:45 +08:00
2026-07-20 10:40:18 +08:00
2026-07-22 13:32:35 +08:00
2026-07-19 12:17:52 +08:00
2026-07-19 12:17:52 +08:00
2026-07-19 12:17:42 +08:00
2026-07-19 12:17:42 +08:00
2026-07-19 22:40:58 +08:00
2026-07-19 22:40:58 +08:00
2026-07-31 03:02:01 +00:00
2026-07-22 13:32:35 +08:00
2026-07-25 12:50:46 +08:00
2026-07-20 15:20:51 +08:00
2026-07-20 15:20:51 +08:00
2026-07-31 15:04:56 +08:00
2026-07-31 15:04:56 +08:00
2026-07-19 00:56:21 -07:00
2026-07-28 12:28:46 +08:00
2026-07-23 15:50:44 +08:00
2026-07-25 21:59:20 +07:00
2026-07-25 18:34:37 +08:00
2026-07-25 05:31:31 +08:00
2026-07-25 15:37:05 +08:00
2026-07-20 16:12:56 +08:00
2026-07-31 10:30:30 +08:00
2026-08-01 21:54:11 +08:00
2026-08-01 21:54:11 +08:00
2026-07-21 05:02:30 -07:00
2026-07-21 05:02:30 -07:00
2026-07-21 05:02:30 -07:00
2026-07-21 05:02:30 -07:00
2026-07-27 18:42:34 +08:00
2026-07-27 18:42:34 +08:00
2026-07-20 18:49:24 +08:00
2026-07-24 20:15:58 +08:00
2026-08-01 10:01:47 +08:00
2026-07-27 14:54:01 +08:00
2026-07-27 14:54:01 +08:00
2026-07-25 01:40:26 +08:00
2026-07-22 13:32:35 +08:00
2026-07-22 13:32:35 +08:00
2026-07-19 19:48:25 +08:00
2026-08-01 10:01:47 +08:00
2026-07-28 09:19:13 +08:00
2026-07-21 15:22:12 +08:00
2026-07-24 01:22:34 +08:00
2026-07-21 15:22:12 +08:00
2026-07-22 13:32:35 +08:00
2026-07-20 16:12:56 +08:00
2026-07-31 18:57:43 +08:00
2026-07-31 18:57:43 +08:00
2026-07-31 03:02:01 +00:00
2026-07-22 12:15:48 +08:00
2026-07-22 12:15:48 +08:00
2026-07-31 20:27:46 +08:00
2026-07-27 14:54:01 +08:00
2026-07-27 14:54:01 +08:00
2026-08-01 10:01:47 +08:00
2026-08-01 10:01:47 +08:00
2026-07-28 17:21:32 +08:00
2026-07-31 21:21:13 +08:00
2026-07-31 21:48:10 +08:00
2026-07-19 18:50:33 +08:00
2026-07-20 16:29:12 +08:00
2026-07-19 18:50:33 +08:00
2026-08-01 10:01:47 +08:00
2026-07-31 10:30:30 +08:00
2026-07-31 21:21:13 +08:00
2026-08-01 10:01:47 +08:00
2026-07-31 10:30:30 +08:00
2026-07-22 13:32:35 +08:00
2026-07-27 00:43:53 +08:00
2026-07-25 12:50:46 +08:00
2026-07-27 22:22:46 +08:00
2026-07-25 12:51:20 +08:00
2026-07-25 12:50:46 +08:00
2026-07-27 22:22:46 +08:00
2026-07-28 10:08:39 +08:00
2026-07-28 11:23:53 +08:00
2026-07-31 21:49:44 +08:00
2026-07-31 18:55:15 +08:00
2026-07-31 10:30:30 +08:00
2026-07-31 10:30:30 +08:00
2026-07-21 11:16:04 +08:00
2026-07-21 11:16:04 +08:00
2026-07-25 01:40:26 +08:00
2026-07-28 09:19:13 +08:00
2026-07-28 09:19:13 +08:00
2026-07-28 09:19:13 +08:00
2026-07-24 02:59:32 +08:00
2026-07-25 15:37:06 +08:00
2026-07-25 15:37:05 +08:00
2026-07-26 13:43:06 +08:00
2026-07-21 05:02:30 -07:00
2026-07-24 02:59:32 +08:00
2026-07-26 13:43:06 +08:00
2026-07-26 13:43:06 +08:00
2026-07-26 13:43:06 +08:00
2026-07-31 21:21:13 +08:00
2026-07-26 13:43:06 +08:00
2026-07-29 13:25:03 +08:00
2026-07-28 12:28:46 +08:00
2026-07-28 14:12:46 +08:00
2026-07-28 14:12:46 +08:00
2026-07-31 14:21:36 +08:00
2026-07-31 14:21:36 +08:00
2026-07-22 19:18:04 +08:00
2026-07-22 19:18:04 +08:00
2026-07-22 19:18:04 +08:00
2026-07-26 03:18:30 +08:00
2026-07-26 03:18:30 +08:00
2026-07-26 03:18:30 +08:00
2026-07-22 19:18:04 +08:00
2026-07-31 21:20:32 +08:00
2026-07-31 09:42:46 +08:00
2026-07-25 19:40:53 +08:00
2026-07-25 19:40:53 +08:00
2026-07-21 03:07:01 +08:00
2026-07-24 01:22:34 +08:00
2026-07-24 01:22:34 +08:00
2026-07-28 11:45:18 +08:00
2026-07-27 15:12:51 +08:00
2026-07-27 15:12:51 +08:00
2026-07-30 16:28:19 +08:00
2026-07-30 16:28:19 +08:00
2026-07-30 16:28:19 +08:00
2026-07-30 16:28:19 +08:00
2026-07-27 15:12:51 +08:00
2026-07-30 16:28:19 +08:00
2026-07-30 16:28:19 +08:00
2026-07-30 02:37:14 +08:00
2026-07-19 21:37:26 +08:00
2026-07-30 02:37:14 +08:00
2026-07-30 02:37:14 +08:00
2026-07-30 02:37:14 +08:00
2026-07-28 10:08:39 +08:00
2026-07-28 10:08:39 +08:00
2026-07-25 21:59:20 +07:00
2026-07-29 18:35:56 +08:00
2026-08-01 22:11:09 +08:00
2026-08-01 22:11:10 +08:00
2026-08-01 22:11:10 +08:00
2026-07-22 13:32:35 +08:00
2026-07-22 13:32:35 +08:00
2026-07-31 16:11:45 +08:00
2026-07-31 16:11:45 +08:00
2026-07-27 00:43:53 +08:00
2026-07-25 15:16:05 +08:00
2026-08-01 11:29:58 +08:00
2026-08-01 11:29:58 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-07-30 02:37:14 +08:00
2026-07-19 21:37:26 +08:00
2026-07-30 02:37:14 +08:00
2026-07-26 09:50:28 -04:00