RE: Skipping logical replication transactions on subscriber side - Mailing list pgsql-hackers

From houzj.fnst@fujitsu.com
Subject RE: Skipping logical replication transactions on subscriber side
Date
Msg-id OS0PR01MB5716D0FF157E5EF33CA8B6CB94FD9@OS0PR01MB5716.jpnprd01.prod.outlook.com
Whole thread Raw
In response to Re: Skipping logical replication transactions on subscriber side  (Masahiko Sawada <sawada.mshk@gmail.com>)
Responses RE: Skipping logical replication transactions on subscriber side  ("houzj.fnst@fujitsu.com" <houzj.fnst@fujitsu.com>)
Re: Skipping logical replication transactions on subscriber side  (Masahiko Sawada <sawada.mshk@gmail.com>)
List pgsql-hackers
On Thu, Aug 12, 2021 1:53 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:
> I've attached the updated patches. FYI I've included the patch
> (v8-0005) that fixes the assertion failure during shared fileset cleanup to make
> cfbot tests happy.

Hi,

Thanks for the new patches.
I have a few comments on the v8-0001 patch.

1)
+
+    if (TransactionIdIsNormal(errarg->remote_xid))
+        appendStringInfo(&buf, _(" in transaction id %u with commit timestamp %s"),
+                         errarg->remote_xid,
+                         errarg->commit_ts == 0
+                         ? "(unset)"
+                         : timestamptz_to_str(errarg->commit_ts));
+
+    errcontext("%s", buf.data);

I think we can output the timestamp in a separete check which can be more
consistent with the other code style in apply_error_callback()
(ie)
+    if (errarg->commit_ts != 0)
+        appendStringInfo(&buf, _(" with commit timestamp %s"),
+                        timestamptz_to_str(errarg->commit_ts));


2)
+/*
+ * Get string representing LogicalRepMsgType.
+ */
+char *
+logicalrep_message_type(LogicalRepMsgType action)
+{
...
+
+    elog(ERROR, "invalid logical replication message type \"%c\"", action);
+}

Some old compilers might complain that the function doesn't have a return value
at the end of the function, maybe we can code like the following:

+char *
+logicalrep_message_type(LogicalRepMsgType action)
+{
+    switch (action)
+    {
+        case LOGICAL_REP_MSG_BEGIN:
+            return "BEGIN";
...
+        default:
+            elog(ERROR, "invalid logical replication message type \"%c\"", action);
+    }
+    return NULL;                /* keep compiler quiet */
+}


3)
Do we need to invoke set_apply_error_context_xact() in the function
apply_handle_stream_prepare() to save the xid and timestamp ?

Best regards,
Hou zj

pgsql-hackers by date:

Previous
From: Peter Smith
Date:
Subject: Re: logical replication empty transactions
Next
From: Michael Paquier
Date:
Subject: Re: ECPG bug fix: DECALRE STATEMENT and DEALLOCATE, DESCRIBE