fix(sync): 避免 sync_aof=false 时缓存增量流#1050
Conversation
1133fc7 to
525504b
Compare
Assisted-by: Codex:gpt-5.5
d921444 to
05b442b
Compare
Assisted-by: Codex:gpt-5.5
Assisted-by: Codex:gpt-5.5
不行。如果 RedisShake 不接收数据,会导致源端 TCP ouput buffer 堆积。 |
|
这个改动不是保留 replication 连接但不接收数据。之前 RDB payload 接收完成后,会无条件启动 AOF receiver: go r.sendReplconfAck()
go r.receiveAOF()现在 if r.opts.SyncAof {
go r.sendReplconfAck()
go r.receiveAOF()
} else {
r.client.Close()
}Redis 端连接断开后会按 replica 断连路径清理 client: RDB 传输期间的正常增量积压仍然存在,这是 full sync 本身的行为,这个 PR 没有改变这部分行为。 总结一下:这个 PR 只是把 RDB 接收完成后的无效 AOF 缓存去掉,没有引入额外的源端 output buffer 积压问题。
|
背景
sync_reader.sync_aof=false表示只同步 RDB、跳过增量 AOF,并在全量同步完成后退出。当前实现会在 RDB payload 接收完成后无条件启动 AOF receiver,导致后续 replication stream 仍被写入本地 AOF backlog,但这部分数据不会发送到目标端。
改动
sync_aof=true时启动 AOF receiver 和 PSYNC ACK。sync_aof=false时关闭源端 replication 连接,避免缓存无消费者的增量流。syncing rdb,再写入增量 key,确认不会生成.aofbacklog,也不会增加aof_received_bytes。advanced配置,避免测试 helper 覆盖它。验证思路
这个 PR 保留三个提交,用来分别确认测试和修复有效:
0.aof。这些测试任务来自 fork 分支 push 自动触发的 workflow。