vip: with etcd, the automatic failover leaves the VIP on no node: the statement of keel#165 cannot be written in the sandbox of keel-vip.service #178
Labels
No labels
accessibility
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Keel-Linux/keel#178
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found on real nodes on 2026-10-15 (keel 0.23.27, the PostgreSQL pair 9054 and 9062 with the etcd witness 9071; evidence in the handbook,
docs/evidence/2026-10-15-pair-etcd-failover-real.md).What happened
Case (c) at base: 9054, the primary, was cut off at 1792087979.98. The VIP controller of 9062 claimed epoch 14 in etcd when the lease of epoch 13 expired. Then:
The root half of keel-vip.service writes the statement of keel#165 to
/var/lib/keel/database/old-primary-gone. The unit hasProtectSystem=strictandReadWritePaths=/var/lib/keel/vip /etc/wireguard, so the write fails.Ops.holdraised before it recorded the claim. The next turn took the claim from the counter withtake(), which keeps no lease for this node's own claim. The controller renews and carries only claims with a lease. Thus 9062 held epoch 14 in etcd and in its state, with no lease, and no node carried the VIP. 9062 stayed in recovery. The pair took no write until the operator rankeel database promote --old-primary-goneon 9054.CI did not see it: the netns harness runs the helper with
ReadWritePathson the whole root of the node.Expected
/var/lib/keel/vip, the state directory of the unit.take()of this node's own claim from the counter keeps the lease that is signed into it, so a claim that etcd holds is renewed and carried.ReadWritePathsof keel-vip.service.