v8_amit_1.txt

text/plain

Filename: v8_amit_1.txt
Type: text/plain
Part: 0
Message: Re: [Patch] add new parameter to pg_replication_origin_session_setup
diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c
index 0bbc96bcee5..c93b6eb1798 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -1169,6 +1169,15 @@ replorigin_session_setup(RepOriginId node, int acquired_by)
 							curstate->roident, curstate->acquired_by)));
 		}
 
+		else if (curstate->acquired_by != 0 &&
+				 curstate->acquired_by != acquired_by)
+		{
+			ereport(ERROR,
+					(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
+					 errmsg("could not find replication state slot for replication origin with OID %u which was acquired by %d",
+							node, acquired_by)));
+		}
+
 		/* ok, found slot */
 		candidate_state = curstate;
 		break;
@@ -1196,14 +1205,8 @@ replorigin_session_setup(RepOriginId node, int acquired_by)
 
 	if (acquired_by == 0)
 		candidate_state->acquired_by = MyProcPid;
-	else if (candidate_state->acquired_by != acquired_by)
-	{
-		if (initialized)
-			candidate_state->roident = InvalidRepOriginId;
-
-		elog(ERROR, "could not find replication state slot for replication origin with OID %u which was acquired by %d",
-			 node, acquired_by);
-	}
+	else
+		Assert(candidate_state->acquired_by == acquired_by);
 
 	/* Candidate slot looks ok, use it */
 	session_replication_state = candidate_state;