Introduce macros determining if a replication slot is physical or logical.
authorAndres Freund <[email protected]>
Tue, 11 Aug 2015 10:32:48 +0000 (12:32 +0200)
committerAndres Freund <[email protected]>
Tue, 11 Aug 2015 10:32:48 +0000 (12:32 +0200)
These make the code a bit easier to read, and make it easier to add a
more explicit notion of a slot's type at some point in the future.

Author: Gurjeet Singh
Discussion: CABwTF4Wh_dBCzTU=49pFXR6coR4NW1ynb+vBqT+Po=7fuq5iCw@mail.gmail.com

src/backend/replication/logical/logical.c
src/backend/replication/slot.c
src/backend/replication/walsender.c
src/include/replication/slot.h

index ee7d3268f02830fbb921d759be80dae05557b985..5411e599eb2e2d6ed6ec3a70729736544a13057f 100644 (file)
@@ -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"))));
index abe8747fe4de401f9c63cc396766a0b8a1f1e2a5..1f013af8871a8ad03ca6901b90777a378118c5bc 100644 (file)
@@ -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 */
index eb1b89b9c3205f90f71a79b39870ef0d002b2a84..e1bab079d5dbd02fae04b5d209ea51f1b2e5c986 100644 (file)
@@ -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);
index 78cff07abf801db7544fc7e30f68680246833e4b..367ef0a38dc3836b89fe68981164e1b165a0333d 100644 (file)
@@ -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.
  */