[tarantool-patches] [PATCH 3/6] swim: factor out 'update' part of swim_member_upsert()
Vladislav Shpilevoy
v.shpilevoy at tarantool.org
Fri Apr 12 01:22:27 MSK 2019
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 0e7f51adf..2dac6eedd 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;
}
/*
--
2.17.2 (Apple Git-113)
More information about the Tarantool-patches
mailing list