Skip to content

style: 日志与输出对齐成熟 Go 写法,信号信道改 struct{} - #278

Merged
NeverENG merged 1 commit into
mainfrom
style/logs-and-output
Aug 13, 2026
Merged

style: 日志与输出对齐成熟 Go 写法,信号信道改 struct{}#278
NeverENG merged 1 commit into
mainfrom
style/logs-and-output

Conversation

@NeverENG

Copy link
Copy Markdown
Owner

「风格不够老道」这次我先把它变成可检查的痕迹,再逐条修。前几轮已处理过注释叙述历史、装饰标记、术语混用;本轮量化后发现注释形态其实已经健康(218 处单行、仅 7 处 ≥4 行、辩论式措辞 1 处),剩下的生手痕迹在别处

① 日志:slog 已分级,消息里再写级别是重复

slog.Warn("[WARN] handlePut: data too short", "len", len(data))

[WARN]slog.Warn 重复;handlePut: 这类函数名前缀应由结构化字段承载,而不是拼进消息文本。7 处改为「简短小写英文短语 + 字段」,与仓库其余 104 条日志一致:

改前 改后
[WARN] handlePut: data too short put frame too short + len
[ERROR] handlePut: forward failed forward put to owner failed + owner/error
[cluster] failover: node removed from ring node removed from ring + node

唯一一条中文日志(scan 结果截断)改为英文。日志语言由 110:1 变为 111:0 全英文——同一套日志里混语言是最显眼的不一致。

② 面向用户的输出:去掉 emoji

交互式 CLI 里的 ❌ 错误: / ✅ OK 改为纯文本。

CLI 自身的中文行文保持不变:它面向人,与面向机器的日志是两套受众,不该混为一谈——这不是不一致,是分工。

③ 信号信道 chan boolchan struct{}

Engine.flushChEngine.compactChRaft.electionChRaft.heartbeatCh 的接收端一律 case <-ch: 丢弃该值——那个 bool 不携带任何信息,用 struct{} 才是 Go 的写法。

raft.voteCh 保持 chan bool:它真的在传值(voteGranted := <-voteCh)。差点连它一起改,查了接收端才发现。

④ 收敛导出面积

以下字段包外零引用,改为包内私有:Engine.FlushChan(同时与 compactCh 命名对齐为 flushCh)、MsgHandle.TaskQueue / WorkerPoolSizeServer.ExitCh / IPVersion

Server.IP / Port / Name 保持导出——集成测试确实在外部设置它们。

过程记录

批量改名时正则把 config.G.WorkerPoolSize 也改掉了——同名但不同物(那是对外可见的配置字段,改了会破坏配置文件),编译器抓到后已改回。

验证

go build ./...(含 -tags pprof)、go vet ./...go test -race ./...gofmt 全绿;scripts/bench.sh 实跑通过。

🤖 Generated with Claude Code

日志:slog 已按级别输出,消息里再写 [ERROR]/[WARN] 是重复;handlePut: 这类函数名前缀
则应由结构化字段承载。7 处改为「简短小写英文短语 + 字段」,与仓库其余 104 条日志一致:
  "[WARN] handlePut: data too short"  → "put frame too short" + len
  "[ERROR] handlePut: forward failed" → "forward put to owner failed" + owner/error
  "[cluster] failover: node removed"  → "node removed from ring" + node
唯一一条中文日志(scan 结果截断)改为英文,日志语言由 110:1 变为 111:0 全英文。

面向用户的输出:交互式 CLI 去掉 ❌/✅ emoji。CLI 自身的中文行文保持不变——它面向人,
与面向机器的日志是两套受众,不应混为一谈。

信号信道 chan bool → chan struct{}:Engine.flushCh、Engine.compactCh、Raft.electionCh、
Raft.heartbeatCh 的接收端一律丢弃该值(case <-ch:),那个 bool 不携带任何信息。
raft 的 voteCh 保持 chan bool——它真的在传值(voteGranted := <-voteCh)。

收敛导出面积:以下字段包外零引用,改为包内私有——Engine.FlushChan(同时与 compactCh
命名对齐为 flushCh)、MsgHandle.TaskQueue/WorkerPoolSize、Server.ExitCh/IPVersion。
Server.IP/Port/Name 保持导出:集成测试确实在外部设置它们。

过程记录:批量改名时正则把 config.G.WorkerPoolSize 也改掉了——同名但不同物(那是对外
可见的配置字段),已改回。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@NeverENG
NeverENG merged commit bcf3550 into main Aug 13, 2026
3 checks passed
@coderabbitai

coderabbitai Bot commented Aug 13, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@NeverENG, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 16 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 29d017b2-9701-4c4b-9338-072bb6d99d4a

📥 Commits

Reviewing files that changed from the base of the PR and between 0dd7d27 and 5b1b9ed.

📒 Files selected for processing (10)
  • bannet/msghandle.go
  • bannet/server.go
  • client/client_test.go
  • cluster/placement.go
  • cmd/ban-cli/interactive.go
  • raft/raft.go
  • raft/rpc.go
  • service/fsm.go
  • service/router.go
  • storage/engine.go

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

🐯 BanGD 数据库内核评审

整体风险:🟢 低

变更总结:这是一个纯风格/一致性 PR,不动任何并发、存储、格式不变量。四类改动:① 日志消息去掉冗余级别前缀([WARN] handlePut: → 简短短语 + 结构化字段),与仓库既有的 104 条 slog 用法对齐,并清掉唯一一条中文日志;② 交互式 CLI 去掉 emoji(面向人的行文保留中文,与面向机器的英文日志分工);③ 信号信道 chan boolchan struct{}(engine.flushCh/compactCh、raft 的 electionCh/heartbeatCh),值确实被丢弃;④ 收敛导出面积——包外零引用的 Msghandle.WorkerPoolSize/TaskQueueServer.ExitCh/IPVersion 改私有并改名对齐(FlushChan→flushCh 同时与 compactCh 对齐),并承认 config.G.WorkerPoolSize 是同名不同物。整个 PR 不触碰任何不变量或数据路径语义,唯一风险点是改名时正则误伤 config 字段——编译器已抓住并回改。

本评审不阻塞合入;架构级建议以 Issue 形式跟踪,普通问题在下方内联列出。

架构问题(共 2 项)

普通问题(共 1 项)

💡 [建议 · 命名一致性] storage/engine.go:290 FlushChan 改名 flushCh 后注释仍残留旧名

  • diff 把 FlushChan 整体改名 flushCh,但新增的注释块「flushCh 与 compactCh 是纯信号……」措辞正确;真正的问题在于 diff 后 engine.go 内并未留旧名——需确认仓库内是否还有 FlushChan 的残留引用(包外调用方已随导出→私有一并找不到编译器引用)。若 all references 均已清理则本项不成立,仅作确认提醒。
  • 建议:确认 FlushChan 无遗留引用(go vet/build 已覆盖此点,PR 声称已过检,故基本可判定无残留)。

本次评审消耗 token:共 91824 tokens(输入 78861,输出 3235,缓存命中 9728,缓存写入 0)|维度 [concurrency, memory, lock, storage, performance]|补充阅读周边文件 [bannet/connection.go]|对抗式复核 3 票/条,过滤疑似误报 0 条

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant