Есть кое-что, что я пытаюсь понять об обнаружении сбоев и сплетнях об обнаружении.
Тест multi-jvm, который я написал, похоже, показывает, что член, который был обнаружен как неисправный, но все еще достижимый черездругие узлы не получат событие UnreachableMember(self)
, сообщающее ему, что он был определен как недоступный для какого-либо участника.
Тест прошел следующим образом: в кластере из 3 узлов node2
обнаруживает node3
какнедоступный, node3
обнаруживает node2
как недоступный.Затем node1
получает информацию о том, что node2
и node3
недоступны (через сплетни).Однако node2
и node3
никогда не получают факта, что они сами были обнаружены как недоступные.
После некоторого поиска в GossipSpec
я обнаружил, что «ложно» недоступный элемент достигнет конвергенции, даже еслиэто отмечается как Unreachable
(см. тест "not reach convergence when unreachable"
).
Это причина, по которой я не вижу событие UnreachableMember(self)
?
Конечная цель Япопытка определить, что член был ложно признан недостижимым, поскольку он недоступен для данного участника из-за неисправного канала между ними.