Hi Nisha.

Here are some review comments for patch v57-0001.

======
src/backend/replication/slot.c

1.
+
+/*
+ * Raise an error based on the invalidation cause of the slot.
+ */
+static void
+RaiseSlotInvalidationError(ReplicationSlot *slot)
+{
+ StringInfoData err_detail;
+
+ initStringInfo(&err_detail);
+
+ switch (slot->data.invalidated)

1a.
/invalidation cause of the slot./slot's invalidation cause./

~

1b.
This function does not expect to be called with slot->data.invalidated
== RS_INVAL_NONE, so I think it will be better to assert that
up-front.

~

1c.
This code could be simplified if you declare/initialize the variable
together, like:

StringInfo err_detail = makeStringInfo();

~~~

2.
+ case RS_INVAL_WAL_REMOVED:
+ appendStringInfo(&err_detail, _("This slot has been invalidated
because the required WAL has been removed."));
+ break;
+
+ case RS_INVAL_HORIZON:
+ appendStringInfo(&err_detail, _("This slot has been invalidated
because the required rows have been removed."));
+ break;

Since there are no format strings here, appendStringInfoString can be
used directly in some places.

======

FYI. I've attached a diffs patch that implements some of the
above-suggested changes.

======
Kind Regards,
Peter Smith.
Fujitsu Australia
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index 2a99c1f..71c6ae2 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -2816,23 +2816,23 @@ WaitForStandbyConfirmation(XLogRecPtr wait_for_lsn)
 static void
 RaiseSlotInvalidationError(ReplicationSlot *slot)
 {
-       StringInfoData err_detail;
+       StringInfo err_detail = makeStringInfo();
 
-       initStringInfo(&err_detail);
+       Assert(slot->data.invalidated != RS_INVAL_NONE);
 
        switch (slot->data.invalidated)
        {
                case RS_INVAL_WAL_REMOVED:
-                       appendStringInfo(&err_detail, _("This slot has been 
invalidated because the required WAL has been removed."));
+                       appendStringInfoString(err_detail, _("This slot has 
been invalidated because the required WAL has been removed."));
                        break;
 
                case RS_INVAL_HORIZON:
-                       appendStringInfo(&err_detail, _("This slot has been 
invalidated because the required rows have been removed."));
+                       appendStringInfoString(err_detail, _("This slot has 
been invalidated because the required rows have been removed."));
                        break;
 
                case RS_INVAL_WAL_LEVEL:
                        /* translator: %s is a GUC variable name */
-                       appendStringInfo(&err_detail, _("This slot has been 
invalidated because \"%s\" is insufficient for slot."),
+                       appendStringInfo(err_detail, _("This slot has been 
invalidated because \"%s\" is insufficient for slot."),
                                                         "wal_level");
                        break;
 
@@ -2844,5 +2844,5 @@ RaiseSlotInvalidationError(ReplicationSlot *slot)
                        errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
                        errmsg("can no longer get changes from replication slot 
\"%s\"",
                                   NameStr(slot->data.name)),
-                       errdetail_internal("%s", err_detail.data));
+                       errdetail_internal("%s", err_detail->data));
 }

Reply via email to