diff --git a/gms/gossiper.cc b/gms/gossiper.cc index 43155fa48e..0b83955d21 100644 --- a/gms/gossiper.cc +++ b/gms/gossiper.cc @@ -480,7 +480,8 @@ future<> gossiper::apply_state_locally(std::map ma int local_generation = local_ep_state_ptr.get_heart_beat_state().get_generation(); int remote_generation = remote_state.get_heart_beat_state().get_generation(); logger.trace("{} local generation {}, remote generation {}", ep, local_generation, remote_generation); - if (local_generation != 0 && remote_generation > local_generation + MAX_GENERATION_DIFFERENCE) { + // A node was removed with nodetool removenode can have a generation of 2 + if (local_generation > 2 && remote_generation > local_generation + MAX_GENERATION_DIFFERENCE) { // assume some peer has corrupted memory and is broadcasting an unbelievable generation about another peer (or itself) logger.warn("received an invalid gossip generation for peer {}; local generation = {}, received generation = {}", ep, local_generation, remote_generation);