| From: | Japin Li <japinli(at)hotmail(dot)com> |
|---|---|
| To: | Ajin Cherian <itsajin(at)gmail(dot)com> |
| Cc: | shveta malik <shveta(dot)malik(at)gmail(dot)com>, Ashutosh Bapat <ashutosh(dot)bapat(dot)oss(at)gmail(dot)com>, Ashutosh Sharma <ashu(dot)coek88(at)gmail(dot)com>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | Re: Improve pg_sync_replication_slots() to wait for primary to advance |
| Date: | 2025-10-27 09:22:13 |
| Message-ID: | ME0P300MB0445FEB01374B1CBC55AD008B6FCA@ME0P300MB0445.AUSP300.PROD.OUTLOOK.COM |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi, Ajin
Thanks for updating the patch.
On Mon, 27 Oct 2025 at 18:47, Ajin Cherian <itsajin(at)gmail(dot)com> wrote:
> On Fri, Oct 24, 2025 at 8:29 PM shveta malik <shveta(dot)malik(at)gmail(dot)com> wrote:
>>
>> On Wed, Oct 22, 2025 at 10:25 AM Ajin Cherian <itsajin(at)gmail(dot)com> wrote:
>> >
>> >
>> > I've modified the comments to reflect the new changes.
>> >
>> > attaching patch v18 with the above changes.
>> >
>>
>> Thanks for the patch. The test is still not clear. Can we please add
>> the test after the test of "Test logical failover slots corresponding
>> to different plugins" finishes instead of adding it in between?
>>
>
> I've rewritten the tests again to make this possible. Attaching v19
> which has the modified tap test.
Here are some comments on the new patch.
1. Given the existence of the foreach_ptr macro, we can switch the usage of
foreach to foreach_ptr.
diff --git a/src/backend/replication/logical/slotsync.c b/src/backend/replication/logical/slotsync.c
index 1b78ffc5ff1..5db51407a82 100644
--- a/src/backend/replication/logical/slotsync.c
+++ b/src/backend/replication/logical/slotsync.c
@@ -872,7 +872,6 @@ fetch_remote_slots(WalReceiverConn *wrconn, List *slot_names)
if (slot_names != NIL)
{
- ListCell *lc;
bool first_slot = true;
/*
@@ -880,10 +879,8 @@ fetch_remote_slots(WalReceiverConn *wrconn, List *slot_names)
*/
appendStringInfoString(&query, " AND slot_name IN (");
- foreach(lc, slot_names)
+ foreach_ptr(char, slot_name, slot_names)
{
- char *slot_name = (char *) lfirst(lc);
-
if (!first_slot)
appendStringInfoString(&query, ", ");
@@ -1872,15 +1869,13 @@ static List *
extract_slot_names(List *remote_slots)
{
List *slot_names = NIL;
- ListCell *lc;
MemoryContext oldcontext;
/* Switch to long-lived TopMemoryContext to store slot names */
oldcontext = MemoryContextSwitchTo(TopMemoryContext);
- foreach(lc, remote_slots)
+ foreach_ptr(RemoteSlot, remote_slot, remote_slots)
{
- RemoteSlot *remote_slot = (RemoteSlot *) lfirst(lc);
char *slot_name;
slot_name = pstrdup(remote_slot->name);
2. To append a signal character, switch from appendStringInfoString() to the
more efficient appendStringInfoChar().
+ appendStringInfoString(&query, ")");
3. The query memory can be released immediately after walrcv_exec() because
there are no subsequent references.
@@ -895,6 +892,7 @@ fetch_remote_slots(WalReceiverConn *wrconn, List *slot_names)
/* Execute the query */
res = walrcv_exec(wrconn, query.data, SLOTSYNC_COLUMN_COUNT, slotRow);
+ pfree(query.data);
if (res->status != WALRCV_OK_TUPLES)
ereport(ERROR,
errmsg("could not fetch failover logical slots info from the primary server: %s",
@@ -975,7 +973,6 @@ fetch_remote_slots(WalReceiverConn *wrconn, List *slot_names)
}
walrcv_clear_result(res);
- pfree(query.data);
return remote_slot_list;
}
>
> Fujitsu Australia
>
> [2. text/x-diff; v19-0001-Improve-initial-slot-synchronization-in-pg_sync_.patch]...
--
Regards,
Japin Li
ChengDu WenWu Information Technology Co., Ltd.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | wenhui qiu | 2025-10-27 09:50:21 | Re: [PATCH] Little refactoring of portalcmds.c |
| Previous Message | Peter Eisentraut | 2025-10-27 09:21:48 | Re: Remove Item type |