diff --git a/src/lib/swim/swim.c b/src/lib/swim/swim.c index 3bd006ad1d7ab6428134c009dba7c212183ce99d..465e850a5cb0509aaaf35a000df97457e02d8b5e 100644 --- a/src/lib/swim/swim.c +++ b/src/lib/swim/swim.c @@ -531,11 +531,6 @@ struct swim { struct rlist round_queue; /** Generator of round step events. */ struct ev_timer round_tick; - /** - * True if a packet in the round step task is still valid - * and can be resent on a next round step. - */ - bool is_round_packet_valid; /** * Preallocated buffer to store shuffled members here at * the beginning of each round. @@ -564,20 +559,6 @@ struct swim { struct swim_task round_step_task; }; -/** - * Mark cached round message invalid on any change of any member. - * It triggers postponed rebuilding of the message. The round - * packet can not be rebuilt right now because 1) invalidation can - * occur several times in row when multiple member attributes are - * updated, or more than one member are added, 2) the message can - * be in fly right now in the output queue inside the scheduler. - */ -static inline void -swim_cached_round_msg_invalidate(struct swim *swim) -{ - swim->is_round_packet_valid = false; -} - /** Put the member into a list of ACK waiters. */ static void swim_wait_ack(struct swim *swim, struct swim_member *member, @@ -634,7 +615,6 @@ swim_register_event(struct swim *swim, struct swim_member *member) * SWIM paper as the best option. */ member->status_ttd = ceil(log2(mh_size(swim->members))) + 1; - swim_cached_round_msg_invalidate(swim); } /** @@ -988,7 +968,6 @@ swim_new_round(struct swim *swim) /* -1 for self. */ say_verbose("SWIM %d: start a new round with %d members", swim_fd(swim), size - 1); - swim_cached_round_msg_invalidate(swim); swim_shuffle_members(swim); rlist_create(&swim->round_queue); for (int i = 0; i < size; ++i) { @@ -1147,8 +1126,6 @@ swim_encode_dissemination(struct swim *swim, struct swim_packet *packet) static void swim_encode_round_msg(struct swim *swim) { - if (swim->is_round_packet_valid) - return; struct swim_packet *packet = &swim->round_step_task.packet; swim_packet_create(packet); char *header = swim_packet_alloc(packet, 1); @@ -1161,7 +1138,6 @@ swim_encode_round_msg(struct swim *swim) assert(mp_sizeof_map(map_size) == 1 && map_size >= 2); mp_encode_map(header, map_size); - swim->is_round_packet_valid = true; } /** @@ -1183,14 +1159,11 @@ swim_decrease_event_ttd(struct swim *swim) rlist_foreach_entry_safe(member, &swim->dissemination_queue, in_dissemination_queue, tmp) { - if (member->payload_ttd > 0) { - if (--member->payload_ttd == 0) - swim_cached_round_msg_invalidate(swim); - } + if (member->payload_ttd > 0) + --member->payload_ttd; assert(member->status_ttd > 0); if (--member->status_ttd == 0) { rlist_del_entry(member, in_dissemination_queue); - swim_cached_round_msg_invalidate(swim); if (member->status == MEMBER_LEFT) swim_delete_member(swim, member); }