mirror of
https://gitcode.com/JianFeeeee/webui4frpc.git
synced 2026-10-03 23:53:59 +00:00
refactor: 审查修复 — netload 消除重复 /sys 读 + 全项目 gofmt
- netload_linux.go: SampleNetLoad 聚合循环不再对每接口重复 readIfaceSpeed (snapshot 已汇总 cur.capMbps), 每次采样省 N 次 /sys 读 - gofmt -w: ring.go/ring_engine.go/auth.go/handlers.go/handlers_logs.go/ handlers_users.go/store.go 结构体字段对齐与注释缩进 - README.md: markdownlint 自动修复 (MD028/MD040) 审查结论: 令牌环本身即互斥协议 — OnToken(收令牌)与 StartRing(发令牌) 在同一节点上由令牌串行化, 不存在需要加锁的竞争; WatchLeader 的读为 良性读, 无需 mutex
This commit is contained in:
@ -162,16 +162,17 @@ func (e *Engine) loadSnapshot() Load {
|
||||
|
||||
// OnToken is the SINGLE-ROUND token handler. Per the authoritative design
|
||||
// (plan §令牌环协议): on receiving the token a node simultaneously
|
||||
// (a) ADOPTS the carried cluster picture — incoming state is authoritative
|
||||
// for membership + per-node fields. This is safe because structural
|
||||
// changes (join/remove) are NOT kept in local state waiting to survive
|
||||
// a merge: joins ride a separate pendingJoin channel injected INTO the
|
||||
// token here, and a self-remove writes the node out of state so the
|
||||
// downstream merge naturally drops it.
|
||||
// (b) APPLIES the incremental log delta, then re-attaches own fresh entries.
|
||||
// (c) APPENDS own node info (load/version) — skipped if we self-removed.
|
||||
// (d) INJECTS pending newcomers right after ourselves + forwards to them.
|
||||
// (e) Paces via a parallel rhythm timer (max(ops, timer)).
|
||||
//
|
||||
// (a) ADOPTS the carried cluster picture — incoming state is authoritative
|
||||
// for membership + per-node fields. This is safe because structural
|
||||
// changes (join/remove) are NOT kept in local state waiting to survive
|
||||
// a merge: joins ride a separate pendingJoin channel injected INTO the
|
||||
// token here, and a self-remove writes the node out of state so the
|
||||
// downstream merge naturally drops it.
|
||||
// (b) APPLIES the incremental log delta, then re-attaches own fresh entries.
|
||||
// (c) APPENDS own node info (load/version) — skipped if we self-removed.
|
||||
// (d) INJECTS pending newcomers right after ourselves + forwards to them.
|
||||
// (e) Paces via a parallel rhythm timer (max(ops, timer)).
|
||||
func (e *Engine) OnToken(ctx context.Context, tk *Token) (*Token, error) {
|
||||
// Multi-token guard: only the newest leader-stamped token is kept.
|
||||
if tk.SentAt > 0 && e.lastTokenAt > 0 && tk.SentAt < e.lastTokenAt {
|
||||
|
||||
Reference in New Issue
Block a user