From 1eb82afc10f1474ee3a820d6e88724852a948484 Mon Sep 17 00:00:00 2001 From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Date: Thu, 11 Apr 2019 17:56:15 +0300 Subject: [PATCH] swim: factor out 'update' part of swim_member_upsert() Move 'update' logic into a separate function, because in the next commits it is going to become more complicated due to payload introduction, and it would be undesirable to clog the upsert() function with payload-specific code. Part of #3234 --- src/lib/swim/swim.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/lib/swim/swim.c b/src/lib/swim/swim.c index 0e7f51adf3..2dac6eedd0 100644 --- a/src/lib/swim/swim.c +++ b/src/lib/swim/swim.c @@ -1055,6 +1055,22 @@ swim_update_member_addr(struct swim *swim, struct swim_member *member, } } +/** + * Update an existing member with a new definition. It is expected + * that @a def has an incarnation not older that @a member has. + */ +static inline void +swim_update_member(struct swim *swim, const struct swim_member_def *def, + struct swim_member *member) +{ + assert(member != swim->self); + assert(def->incarnation >= member->incarnation); + if (def->incarnation > member->incarnation) + swim_update_member_addr(swim, member, &def->addr, 0); + swim_update_member_inc_status(swim, member, def->status, + def->incarnation); +} + /** * Update or create a member by its definition, received from a * remote instance. @@ -1099,9 +1115,7 @@ swim_upsert_member(struct swim *swim, const struct swim_member_def *def, if (member != self) { if (def->incarnation < member->incarnation) goto skip; - swim_update_member_addr(swim, member, &def->addr, 0); - swim_update_member_inc_status(swim, member, def->status, - def->incarnation); + swim_update_member(swim, def, member); return 0; } /* -- GitLab