[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