feat: 采集入口可编程钩子真正可拦截/改写 + 真实过滤示例(方向 A)#130
Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…与 StatusDropped 钩子从只读旁观者升级为可丢弃/改写一帧的真实拦截点: - banIface 新增 HookAction(HookPass/HookDrop),IRouter.PreHandle 返回处置决定 - DoMsgHandle 在 HookDrop 时短路 Handle - IRequest.SetMsgData 改写负载并同步 DataLen,供脱敏/裁剪 - service 层 PreHandle 持有「丢弃即回写唯一 StatusDropped 响应」的不变式,避免响应错位 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
新增 service/ingesthook.Filter 并在两个 Server main 上用 SetPreHandle 挂载, 把「落盘前可编程预处理」从挂载点变成端到端可演示能力: - 丢弃畸形 PUT 帧(长度字段与数据不符 / value 超限) - 按设备 best-effort 时间戳单调校验,丢回退/重放帧(work-stealing 下乱序 非顺序保证,已在注释说明,可经 dropBackward 关闭) - 对 JSON 中 gps/user_id 等敏感字段脱敏,改写时重建 valueLen 前缀 仅针对 PUT,GET/DELETE 原样放行;钩子不触碰连接,丢弃响应由 Router 统一回写。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (20)
📝 WalkthroughWalkthroughThis PR adds two independent capabilities: (1) a WAL-backed standalone mode for ChangesStandalone WAL Mode
PreHandle Hook & Ingest Filter
Sequence Diagram(s)sequenceDiagram
participant Client
participant DoMsgHandle
participant Router as service.Router
participant Filter as ingesthook.Filter
participant KVServer
Client->>DoMsgHandle: frame
DoMsgHandle->>Router: PreHandle(request)
Router->>Filter: Handle(request)
alt malformed / oversized / backward timestamp
Filter-->>Router: HookDrop
Router->>Client: MsgRespErr (StatusDropped)
Router-->>DoMsgHandle: HookDrop
note over DoMsgHandle: return early
else valid frame (with optional field redaction)
Filter->>Filter: SetMsgData(redacted payload)
Filter-->>Router: HookPass
Router-->>DoMsgHandle: HookPass
DoMsgHandle->>Router: Handle(request)
Router->>KVServer: Write(cmd)
KVServer->>KVServer: writeStandalone → WAL.Append + storage.Put/Delete
KVServer-->>Router: nil
Router->>Client: MsgRespOK (StatusOK)
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Poem
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🐯 BanGD 数据库内核评审整体风险:🔴 高 变更总结:这个 PR 做了四件事,跨越两个维度: 2. 采集入口过滤钩子实现(service/ingesthook):新增 3. 运行模式独立化 + 存储层 WAL(service/fsm.go, config/global.go, storage/wal.go):新增 4. 协议层新增 此外有 docs 文档微调和 config.json 的 Mode 字段初始化。
架构问题(共 5 项)
普通问题(共 5 项)🛑 [阻塞 · 逻辑错误]
🛑 [阻塞 · 逻辑错误]
💡 [建议 · 错误处理]
本次评审消耗 token:共 544028 tokens(输入 494574,输出 15022,缓存命中 34432,缓存写入 0)|维度 [concurrency, memory, lock, storage, schema]|对抗式复核 3 票/条,过滤疑似误报 0 条 |
背景(采集员视角痛点 #2)
文档把「落盘前可编程预处理」当唯一护城河,但代码层
PreHandle是只读旁观者——签名func(IRequest)无返回值,Handle又自己重读GetMsgData(),钩子既不能丢帧也不能改写。本 PR 把它补成真的。改动(两个原子 commit)
1. 机制层
feat(net)— 钩子可拦截/改写banIface新增HookAction(HookPass/HookDrop),IRouter.PreHandle返回处置决定DoMsgHandle在HookDrop时短路HandleIRequest.SetMsgData改写负载并同步DataLen(脱敏/裁剪用)StatusDropped响应」的不变式,避免纯请求-响应协议错位2. 内容层
feat(service)— 真实采集入口过滤钩子service/ingesthook.Filter测试
go build ./...通过;service/ingesthook8 个单测覆盖 GET 放行、畸形丢弃、超限丢弃、单调丢弃/关闭、无约定 key 放行、脱敏重编码、非 JSON 原样;service既有 FSM 测试不回归。🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Configuration