Re: Make wal_receiver_timeout configurable per subscription - Mailing list pgsql-hackers

From Japin Li
Subject Re: Make wal_receiver_timeout configurable per subscription
Date
Msg-id MEAPR01MB3031A8497426D60CF7E3BB2FB666A@MEAPR01MB3031.ausprd01.prod.outlook.com
Whole thread Raw
In response to Re: Make wal_receiver_timeout configurable per subscription  (Chao Li <li.evan.chao@gmail.com>)
List pgsql-hackers
On Thu, 05 Feb 2026 at 16:04, Chao Li <li.evan.chao@gmail.com> wrote:
>> On Feb 5, 2026, at 08:33, Fujii Masao <masao.fujii@gmail.com> wrote:
>>
>> On Thu, Oct 23, 2025 at 5:19 PM Fujii Masao <masao.fujii@gmail.com> wrote:
>>>
>>> On Mon, Jul 14, 2025 at 10:27 PM Fujii Masao
>>> <masao.fujii@oss.nttdata.com> wrote:
>>>> I've attached the rebased patches.
>>>
>>> Attached are the rebased versions of the patches.
>>
>> I've rebased the patches again.
>>
>> Regards,
>>
>> --
>> Fujii Masao
>>
<v4-0001-Make-GUC-wal_receiver_timeout-user-settable.patch><v4-0002-Add-per-subscription-wal_receiver_timeout-setting.patch>
>
> Hi Fujii-san,
>
> I applied the patch locally and played with it a bit. In short, it adds a new subscription option that allows
overridingthe GUC wal_receiver_timeout for a subscription’s apply worker. The changes look solid overall, and the new
optionworked as expected in my manual testing. 
>
> I have only one small comment:
> ```
> +            /*
> +             * Test if the given value is valid for wal_receiver_timeeout GUC.
> +             * Skip this test if the value is -1, since -1 is allowed for the
> +             * wal_receiver_timeout subscription option, but not for the GUC
> +             * itself.
> +             */
> +            parsed = parse_int(opts->wal_receiver_timeout, &val, 0, NULL);
> +            if (!parsed || val != -1)
> +                (void) set_config_option("wal_receiver_timeout", opts->wal_receiver_timeout,
> +                                         PGC_BACKEND, PGC_S_TEST, GUC_ACTION_SET,
> +                                         false, 0, false);
> ```
>

1.
Typo, s/timeeout/timeout/g.

2.
The comment mentions skipping only "-1".
Since we already use strcmp(... , "-1") later in the code, wouldn't it be
better to use the same check here too?

+    if (strcmp(subinfo->subwalrcvtimeout, "-1") != 0)
+        appendPQExpBuffer(query, ", wal_receiver_timeout = %s", fmtId(subinfo->subwalrcvtimeout));
+

> Here, parse_int() is also from GUC, with flag 0, it will reject any value with units such as “1s” or “7d”. So in
practice,the only purpose of calling parse_int() here is to detect the special value “-1”. 
>
> Given that, I think using atoi() directly may be simpler and easier to read. For example:
> ```
>     if (atoi(opts->wal_receiver_timeout) != -1)
>          /* if value is not -1, then test if the given value is valid for wal_receiver_timeeout GUC.
>          (void) set_config_option("wal_receiver_timeout", opts->wal_receiver_timeout,
>               PGC_BACKEND, PGC_S_TEST, GUC_ACTION_SET,
>               false, 0, false);
> ```
>
> I tried this locally and `make check` still passed.
>
> Similarly, later in set_wal_receiver_timeout(), MySubscription->walrcvtimeout has already been validated, so we could
alsouse atoi() there instead of parse_int(). 
>
> Best regards,
> --
> Chao Li (Evan)
> HighGo Software Co., Ltd.
> https://www.highgo.com/

--
Regards,
Japin Li
ChengDu WenWu Information Technology Co., Ltd.



pgsql-hackers by date:

Previous
From: Michael Paquier
Date:
Subject: Re: Small fixes for incorrect error messages
Next
From: Andrey Borodin
Date:
Subject: Windows locales and tests portability