From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> To: tarantool-patches@freelists.org Cc: kostja@tarantool.org Subject: [tarantool-patches] [PATCH 5.5/6] swim: rename TTL to TTD Date: Thu, 18 Apr 2019 20:43:35 +0300 [thread overview] Message-ID: <5752e49a-c8e0-edb9-fab9-9157a9526e39@tarantool.org> (raw) In-Reply-To: <cover.1555021137.git.v.shpilevoy@tarantool.org> TTL is time-to-live and it slightly confuses when is said about a member's attribute. Status_ttl looks like after this value gets 0 the status is deleted or is no longer valid. TTD is more precise definition for these counters and is expanded as time-to-disseminate. --- src/lib/swim/swim.c | 41 ++++++++++++++++++++------------------- src/lib/swim/swim_proto.h | 2 +- test/unit/swim.c | 4 ++-- test/unit/swim.result | 4 ++-- 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/lib/swim/swim.c b/src/lib/swim/swim.c index 2dac6eedd..3e64e4c91 100644 --- a/src/lib/swim/swim.c +++ b/src/lib/swim/swim.c @@ -284,30 +284,31 @@ struct swim_member { * member state each time any member attribute changes. * * According to SWIM, an event should be sent to all - * members at least once - for that a TTL (time-to-live) - * counter is maintained for each independent event type. + * members at least once - for that a TTD + * (time-to-disseminate) counter is maintained for each + * independent event type. * - * When a member state changes, the TTL is reset to the + * When a member state changes, the TTD is reset to the * cluster size. It is then decremented after each send. * This guarantees that each member state change is sent * to each SWIM member at least once. If a new event of * the same type is generated before a round is finished, * the current event object is updated in place with reset - * of the TTL. + * of the TTD. * - * To conclude, TTL works in two ways: to see which + * To conclude, TTD works in two ways: to see which * specific member attribute needs dissemination and to * track how many cluster members still need to learn * about the change from this instance. */ /** - * General TTL reset each time when any visible member + * General TTD reset each time when any visible member * attribute is updated. It is always bigger or equal than - * any other TTLs. In addition it helps to keep a dead - * member not dropped until the TTL gets zero so as to + * any other TTDs. In addition it helps to keep a dead + * member not dropped until the TTD gets zero so as to * allow other members to learn the dead status. */ - int status_ttl; + int status_ttd; /** * All created events are put into a queue sorted by event * time. @@ -419,7 +420,7 @@ struct swim { * Queue of all members which have dissemination * information. A member is added to the queue whenever * any of its attributes changes, and stays in the queue - * as long as the event TTL is non-zero. + * as long as the event TTD is non-zero. */ struct rlist dissemination_queue; }; @@ -444,9 +445,9 @@ swim_wait_ack(struct swim *swim, struct swim_member *member) /** * On literally any update of a member it is added to a queue of - * members to disseminate updates. Regardless of other TTLs, each - * update also resets status TTL. Status TTL is always greater - * than any other event-related TTL, so it's sufficient to look at + * members to disseminate updates. Regardless of other TTDs, each + * update also resets status TTD. Status TTD is always greater + * than any other event-related TTD, so it's sufficient to look at * it alone to see that a member needs information dissemination. * The status change itself occupies only 2 bytes in a packet, so * it is cheap to send it on any update, while does reduce @@ -459,7 +460,7 @@ swim_register_event(struct swim *swim, struct swim_member *member) rlist_add_tail_entry(&swim->dissemination_queue, member, in_dissemination_queue); } - member->status_ttl = mh_size(swim->members); + member->status_ttd = mh_size(swim->members); swim_cached_round_msg_invalidate(swim); } @@ -872,8 +873,8 @@ swim_encode_round_msg(struct swim *swim) } /** - * Decrement TTLs of all events. It is done after each round step. - * Note, since we decrement TTL of all events, even those which + * Decrement TTDs of all events. It is done after each round step. + * Note, since we decrement TTD of all events, even those which * have not been actually encoded and sent, if there are more * events than can fit into a packet, the tail of the queue begins * reeking and rotting. The most recently added members could even @@ -884,13 +885,13 @@ swim_encode_round_msg(struct swim *swim) * deal with. */ static void -swim_decrease_event_ttl(struct swim *swim) +swim_decrease_event_ttd(struct swim *swim) { struct swim_member *member, *tmp; rlist_foreach_entry_safe(member, &swim->dissemination_queue, in_dissemination_queue, tmp) { - if (--member->status_ttl == 0) { + if (--member->status_ttd == 0) { rlist_del_entry(member, in_dissemination_queue); swim_cached_round_msg_invalidate(swim); if (member->status == MEMBER_LEFT) @@ -959,7 +960,7 @@ swim_complete_step(struct swim_task *task, * sections. */ swim_wait_ack(swim, m); - swim_decrease_event_ttl(swim); + swim_decrease_event_ttd(swim); } } } @@ -1029,7 +1030,7 @@ swim_check_acks(struct ev_loop *loop, struct ev_timer *t, int events) break; case MEMBER_DEAD: if (m->unacknowledged_pings >= NO_ACKS_TO_GC && - swim->gc_mode == SWIM_GC_ON && m->status_ttl == 0) { + swim->gc_mode == SWIM_GC_ON && m->status_ttd == 0) { swim_delete_member(swim, m); continue; } diff --git a/src/lib/swim/swim_proto.h b/src/lib/swim/swim_proto.h index ab4057185..e1c70db43 100644 --- a/src/lib/swim/swim_proto.h +++ b/src/lib/swim/swim_proto.h @@ -268,7 +268,7 @@ swim_anti_entropy_header_bin_create(struct swim_anti_entropy_header_bin *header, * and add more attributes. Or just encode new attributes after * the passport. For example, anti-entropy can add a payload when * it is up to date; dissemination adds a payload when it is up to - * date and TTL is > 0. + * date and TTD is > 0. */ struct PACKED swim_passport_bin { /** mp_encode_map(5) */ diff --git a/test/unit/swim.c b/test/unit/swim.c index f3cf6cd06..6f3871606 100644 --- a/test/unit/swim.c +++ b/test/unit/swim.c @@ -254,10 +254,10 @@ swim_test_basic_failure_detection(void) swim_run_for(1); is(swim_cluster_member_status(cluster, 0, 1), MEMBER_DEAD, "after 2 "\ - "more unacks the member still is not deleted - dissemination TTL "\ + "more unacks the member still is not deleted - dissemination TTD "\ "keeps it"); is(swim_cluster_wait_status(cluster, 0, 1, swim_member_status_MAX, 2), - 0, "but it is dropped after 2 rounds when TTL gets 0"); + 0, "but it is dropped after 2 rounds when TTD gets 0"); /* * After IO unblock pending messages will be processed all diff --git a/test/unit/swim.result b/test/unit/swim.result index d315f181f..a90a86dd0 100644 --- a/test/unit/swim.result +++ b/test/unit/swim.result @@ -68,8 +68,8 @@ ok 5 - subtests ok 1 - node is added as alive ok 2 - member still is not dead after 2 noacks ok 3 - but it is dead after one more - ok 4 - after 2 more unacks the member still is not deleted - dissemination TTL keeps it - ok 5 - but it is dropped after 2 rounds when TTL gets 0 + ok 4 - after 2 more unacks the member still is not deleted - dissemination TTD keeps it + ok 5 - but it is dropped after 2 rounds when TTD gets 0 ok 6 - fullmesh is restored ok 7 - a member is added back on an ACK ok 6 - subtests -- 2.17.2 (Apple Git-113)
next prev parent reply other threads:[~2019-04-18 17:43 UTC|newest] Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-04-11 22:22 [tarantool-patches] [PATCH 0/6] swim payload Vladislav Shpilevoy 2019-04-11 22:22 ` [tarantool-patches] [PATCH 1/6] swim: factor out MP_BIN decoding from swim_decode_uuid Vladislav Shpilevoy 2019-04-11 23:09 ` [tarantool-patches] " Konstantin Osipov 2019-04-12 19:23 ` Vladislav Shpilevoy 2019-04-11 22:22 ` [tarantool-patches] [PATCH 2/6] swim: replace event_bin and member_bin with the passport Vladislav Shpilevoy 2019-04-11 23:10 ` [tarantool-patches] " Konstantin Osipov 2019-04-12 19:23 ` Vladislav Shpilevoy 2019-04-11 22:22 ` [tarantool-patches] [PATCH 3/6] swim: factor out 'update' part of swim_member_upsert() Vladislav Shpilevoy 2019-04-11 23:11 ` [tarantool-patches] " Konstantin Osipov 2019-04-12 19:23 ` Vladislav Shpilevoy 2019-04-11 22:22 ` [tarantool-patches] [PATCH 4/6] test: generalize SWIM fake descriptor filters Vladislav Shpilevoy 2019-04-11 23:11 ` [tarantool-patches] " Konstantin Osipov 2019-04-12 19:23 ` Vladislav Shpilevoy 2019-04-11 22:22 ` [tarantool-patches] [PATCH 5/6] test: introduce new SWIM packet filter by component names Vladislav Shpilevoy 2019-04-11 23:11 ` [tarantool-patches] " Konstantin Osipov 2019-04-12 19:23 ` Vladislav Shpilevoy 2019-04-11 22:22 ` [tarantool-patches] [PATCH 6/6] swim: introduce payload Vladislav Shpilevoy 2019-04-18 15:12 ` [tarantool-patches] " Konstantin Osipov 2019-04-18 17:43 ` Vladislav Shpilevoy 2019-04-18 18:03 ` Konstantin Osipov 2019-04-18 20:40 ` Vladislav Shpilevoy 2019-04-18 17:43 ` Vladislav Shpilevoy [this message] 2019-04-18 17:48 ` [tarantool-patches] Re: [PATCH 5.5/6] swim: rename TTL to TTD Konstantin Osipov 2019-04-18 20:40 ` Vladislav Shpilevoy 2019-04-18 18:16 ` [tarantool-patches] [PATCH 7/6] swim: drop incarnation_inc parameter from update() routines Vladislav Shpilevoy 2019-04-18 18:20 ` [tarantool-patches] " Konstantin Osipov 2019-04-18 20:40 ` Vladislav Shpilevoy
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=5752e49a-c8e0-edb9-fab9-9157a9526e39@tarantool.org \ --to=v.shpilevoy@tarantool.org \ --cc=kostja@tarantool.org \ --cc=tarantool-patches@freelists.org \ --subject='Re: [tarantool-patches] [PATCH 5.5/6] swim: rename TTL to TTD' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox