swim: fix a bug with invalidation of round msg in fly
SWIM works in rounds, each split in steps. On step SWIM sends a round message. The message is not changed between steps of one round usually, and is cached so as not to rebuild it without necessity. But when something changes in one member's attributes, or in the member table, the message is invalidated to be rebuilt on a next step. Invalidation resets the cached packet. But it leads to a bug, when a round message is already scheduled to be sent, however is not actually sent and invalidated in fly. Such a message on a next EV_WRITE event will be sent as an empty packet, which obviously makes no sense. On the other hand it would be harmful to cancel the invalidated packet if it is in fly, because during frequent changes the instance will not send anything. There are no a test case, because empty packets does not break anything, but still they are useless. And, as it is said above, such invalidation would prevent sending any round messages when there are lots of updates. Follow up for cf0ddeb8 (swim: keep encoded round message cached)
Loading
Please register or sign in to comment