Repository navigation
Commit 435b354
committed
clusterer_controller: a member list says who belongs, not who is alive
cl_ctr_handle_member_list() refreshed last_seen for every IP in the list, via
cl_ctr_upsert_peer_locked(). A MEMBER_LIST is a membership announcement: the
master lists a node until it prunes it, whether that node is reachable or not.
Treating it as evidence of liveness makes every receiver believe it has just
heard from peers it has never heard from.
That is what made a dead member immortal. cl_ctr_alive_bitmap() is built from
last_seen, so a backup holding refreshed timestamps for a node that is down
asserts to the whole cluster that it is up the moment that backup becomes
master - and from then on nobody can age it out. It survives its own funeral.
Seen in production: 10.22.20.241 stayed in cluster 243 for about a day, across
a master change, after being rolled back to a build with no controller at all.
Nothing was listening on its BIN port, and the two surviving nodes spent ~3,500
failed connects a day each trying to reach it - roughly 10,668 of one node's
10,801 daily ERROR lines, which buried every other error on the box.
The member-list path now inserts peers it did not know about and leaves
last_seen alone for peers it already tracks. Liveness continues to come only
from direct evidence: a packet sent BY the peer, or the master's alive bitmap,
which the master derives from packets it received itself.
A newly learned peer is still seeded with last_seen = now, so it gets one purge
window to prove itself instead of being dropped on the next tick. This
terminates rather than oscillating: once the master prunes a dead node it stops
listing it, and every receiver ages it out one window later.1 parent 840be47 commit 435b354
1 file changed
Lines changed: 37 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1939 | 1939 | | |
1940 | 1940 | | |
1941 | 1941 | | |
| 1942 | + | |
| 1943 | + | |
| 1944 | + | |
| 1945 | + | |
| 1946 | + | |
| 1947 | + | |
| 1948 | + | |
| 1949 | + | |
| 1950 | + | |
| 1951 | + | |
| 1952 | + | |
| 1953 | + | |
| 1954 | + | |
| 1955 | + | |
| 1956 | + | |
| 1957 | + | |
| 1958 | + | |
| 1959 | + | |
| 1960 | + | |
| 1961 | + | |
| 1962 | + | |
| 1963 | + | |
| 1964 | + | |
| 1965 | + | |
| 1966 | + | |
| 1967 | + | |
| 1968 | + | |
| 1969 | + | |
| 1970 | + | |
| 1971 | + | |
| 1972 | + | |
| 1973 | + | |
| 1974 | + | |
| 1975 | + | |
| 1976 | + | |
1942 | 1977 | | |
1943 | 1978 | | |
1944 | 1979 | | |
| |||
4251 | 4286 | | |
4252 | 4287 | | |
4253 | 4288 | | |
4254 | | - | |
| 4289 | + | |
| 4290 | + | |
4255 | 4291 | | |
4256 | 4292 | | |
4257 | 4293 | | |
| |||
0 commit comments