Simplify some logic in CreateReplicationSlot()
authorMichael Paquier <[email protected]>
Tue, 21 Nov 2023 04:55:01 +0000 (13:55 +0900)
committerMichael Paquier <[email protected]>
Tue, 21 Nov 2023 04:55:01 +0000 (13:55 +0900)
This refactoring reduces the code in charge of creating replication
slots from two "if" block to a single one, making it slightly cleaner.

This change is possible since 1d04a59be31b, that has removed the
intermediate code that existed between the two "if" blocks in charge of
initializing the output message buffer.

Author: Peter Smith
Discussion: https://postgr.es/m/CAHut+PtnJzqKT41Zt8pChRzba=QgCqjtfYvcf84NMj3VFJoKfw@mail.gmail.com

src/backend/replication/walsender.c

index e250b0567ebbc447ada4934a92bf50d30d29d377..3bc9c823895e12aacb628a550a287e0de22e8fcd 100644 (file)
@@ -1061,9 +1061,25 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd)
        ReplicationSlotCreate(cmd->slotname, false,
                              cmd->temporary ? RS_TEMPORARY : RS_PERSISTENT,
                              false);
+
+       if (reserve_wal)
+       {
+           ReplicationSlotReserveWal();
+
+           ReplicationSlotMarkDirty();
+
+           /* Write this slot to disk if it's a permanent one. */
+           if (!cmd->temporary)
+               ReplicationSlotSave();
+       }
    }
    else
    {
+       LogicalDecodingContext *ctx;
+       bool        need_full_snapshot = false;
+
+       Assert(cmd->kind == REPLICATION_KIND_LOGICAL);
+
        CheckLogicalDecodingRequirements();
 
        /*
@@ -1076,12 +1092,6 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd)
        ReplicationSlotCreate(cmd->slotname, true,
                              cmd->temporary ? RS_TEMPORARY : RS_EPHEMERAL,
                              two_phase);
-   }
-
-   if (cmd->kind == REPLICATION_KIND_LOGICAL)
-   {
-       LogicalDecodingContext *ctx;
-       bool        need_full_snapshot = false;
 
        /*
         * Do options check early so that we can bail before calling the
@@ -1175,16 +1185,6 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd)
        if (!cmd->temporary)
            ReplicationSlotPersist();
    }
-   else if (cmd->kind == REPLICATION_KIND_PHYSICAL && reserve_wal)
-   {
-       ReplicationSlotReserveWal();
-
-       ReplicationSlotMarkDirty();
-
-       /* Write this slot to disk if it's a permanent one. */
-       if (!cmd->temporary)
-           ReplicationSlotSave();
-   }
 
    snprintf(xloc, sizeof(xloc), "%X/%X",
             LSN_FORMAT_ARGS(MyReplicationSlot->data.confirmed_flush));