--- id: "bug-1871" status: "investigating" status_updated: "2026-09-27" status_note: "found while soak-verifying the HA group; logs in /home/claude/tmp/xce-ha-final-force-snapshot" component: "lib" severity: "unknown" timestamp: "2026-09-27T07:03:48Z" last_seen: "2026-09-27T07:03:48Z" occurrences: 1 files: ["src/lib/netio.c (endpoint_block_tasks/unblock", "handle_input)", "src/controller/ha.c ha_handle_snapshot_chunk"] tags: ["netio", "epoll", "snapshot", "latency", "ha", "soak"] related: ["bug-1870"] legacy: true gitea_issue: 297 gitea_synced_status: "investigating" gitea_synced_hash: "e0ba41ca7ee9" --- # bug-1871: HA snapshot transfer to a rejoining standby stalls mid-stream: primary queues all chunks at once… ## Description HA snapshot transfer to a rejoining standby stalls mid-stream: primary queues all chunks at once (528KB, 9 chunks); the standby reads a few (1 or 5 of 9 in two runs), its endpoint is unblocked after the last processed chunk, and then no further input event arrives on that connection for 3s+ although the primary has more chunks queued -- --force-snapshot soak's single post-convergence check saw no install (2 of 4 runs, 2026-09-27) ## Environment _Not recorded (migrated from buglog.json)._ ## Reproduction _Not recorded (migrated from buglog.json)._ ## Root cause Not root-caused. Suspect: edge-triggered epoll input + per-endpoint task blocking (netio endpoint_block_tasks): data that arrives while the endpoint is blocked is not re-signalled after endpoint_unblock_tasks, so reading resumes only on the next write from the peer (e.g. the next heartbeat). Likely delays, not loses, the transfer; the soak check was changed to poll 30s. ## Fix _Not recorded (migrated from buglog.json)._ ## Verification _Not recorded (migrated from buglog.json)._ ## References - Related: bug-1870 - Gitea: #297