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