aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/replication/logical/logical.c4
-rw-r--r--src/backend/replication/slot.c6
-rw-r--r--src/backend/replication/walsender.c4
-rw-r--r--src/include/replication/slot.h3
4 files changed, 10 insertions, 7 deletions
diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c
index ee7d3268f02..5411e599eb2 100644
--- a/src/backend/replication/logical/logical.c
+++ b/src/backend/replication/logical/logical.c
@@ -228,7 +228,7 @@ CreateInitDecodingContext(char *plugin,
elog(ERROR, "cannot initialize logical decoding without a specified plugin");
/* Make sure the passed slot is suitable. These are user facing errors. */
- if (slot->data.database == InvalidOid)
+ if (SlotIsPhysical(slot))
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("cannot use physical replication slot for logical decoding")));
@@ -377,7 +377,7 @@ CreateDecodingContext(XLogRecPtr start_lsn,
elog(ERROR, "cannot perform logical decoding without an acquired slot");
/* make sure the passed slot is suitable, these are user facing errors */
- if (slot->data.database == InvalidOid)
+ if (SlotIsPhysical(slot))
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
(errmsg("cannot use physical replication slot for logical decoding"))));
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index abe8747fe4d..1f013af8871 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -693,7 +693,7 @@ ReplicationSlotsComputeLogicalRestartLSN(void)
continue;
/* we're only interested in logical slots */
- if (s->data.database == InvalidOid)
+ if (!SlotIsLogical(s))
continue;
/* read once, it's ok if it increases while we're checking */
@@ -740,8 +740,8 @@ ReplicationSlotsCountDBSlots(Oid dboid, int *nslots, int *nactive)
if (!s->in_use)
continue;
- /* not database specific, skip */
- if (s->data.database == InvalidOid)
+ /* only logical slots are database specific, skip */
+ if (!SlotIsLogical(s))
continue;
/* not our database, skip */
diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index eb1b89b9c32..e1bab079d5d 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -514,7 +514,7 @@ StartReplication(StartReplicationCmd *cmd)
if (cmd->slotname)
{
ReplicationSlotAcquire(cmd->slotname);
- if (MyReplicationSlot->data.database != InvalidOid)
+ if (SlotIsLogical(MyReplicationSlot))
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
(errmsg("cannot use a logical replication slot for physical replication"))));
@@ -1564,7 +1564,7 @@ ProcessStandbyReplyMessage(void)
*/
if (MyReplicationSlot && flushPtr != InvalidXLogRecPtr)
{
- if (MyReplicationSlot->data.database != InvalidOid)
+ if (SlotIsLogical(MyReplicationSlot))
LogicalConfirmReceivedLocation(flushPtr);
else
PhysicalConfirmReceivedLocation(flushPtr);
diff --git a/src/include/replication/slot.h b/src/include/replication/slot.h
index 78cff07abf8..367ef0a38dc 100644
--- a/src/include/replication/slot.h
+++ b/src/include/replication/slot.h
@@ -125,6 +125,9 @@ typedef struct ReplicationSlot
XLogRecPtr candidate_restart_lsn;
} ReplicationSlot;
+#define SlotIsPhysical(slot) (slot->data.database == InvalidOid)
+#define SlotIsLogical(slot) (slot->data.database != InvalidOid)
+
/*
* Shared memory control area for all of replication slots.
*/