Re: issue with synchronized_standby_slots
Ashutosh Sharma <ashu.coek88@gmail.com>
From: Ashutosh Sharma <ashu.coek88@gmail.com>
To: Shlok Kyal <shlok.kyal.oss@gmail.com>
Cc: Amit Kapila <amit.kapila16@gmail.com>,
Alexander Kukushkin <cyberdemn@gmail.com>, Rahila Syed <rahilasyed90@gmail.com>,
Fabrice Chapuis <fabrice636861@gmail.com>, "Zhijie Hou (Fujitsu)" <houzj.fnst@fujitsu.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-09-11T05:37:23Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix GUC check_hook validation for synchronized_standby_slots.
- e0dc4bbfb885 19 (unreleased) landed
- b45a8d7d8b30 18.1 landed
- 0024f5a1022e 17.7 landed
-
Make invalid primary_slot_name follow standard GUC error reporting.
- f33e60a53a9c 19 (unreleased) cited
On Thu, Sep 11, 2025 at 11:00 AM Shlok Kyal <shlok.kyal.oss@gmail.com>
wrote:
>
> On Thu, 11 Sept 2025 at 09:20, Amit Kapila <amit.kapila16@gmail.com>
wrote:
> >
> > On Thu, Sep 11, 2025 at 9:02 AM Amit Kapila <amit.kapila16@gmail.com>
wrote:
> > >
> > > On Wed, Sep 10, 2025 at 5:23 PM Alexander Kukushkin <
cyberdemn@gmail.com> wrote:
> > > >
> > > > On Wed, 10 Sept 2025 at 13:34, Shlok Kyal <shlok.kyal.oss@gmail.com>
wrote:
> > > >>
> > > >> I think we should also add a parsing check for slot names
specified in
> > > >> the GUC synchronize_standby_slots as suggested by Amit in [1].
> > > >> I made the changes in the above for the same and attached the
updated patch.
> > > >
> > > >
> > > > I agree, validating that list contains valid replication slot names
is a good idea.
> > > > However, you used ReplicationSlotValidateName() function, which is
not a good fit for it, especially when it is called with elevel=ERROR in
postmaster.
> > > >
> > >
> > > Can you please explain why you think so? And what is your proposal
for the same?
> > >
> >
> > You are right and I think we should use WARNING here as is used in
> > check_primary_slot_name() for the same function call. For ERROR
> > reporting, we need to use GUC_check_* functions. Also, probably the
> > ERROR during startup could lead to shutdown.
> >
> I tested by setting elevel=ERROR and elevel=WARNING in the function
> ReplicationSlotValidateName.
>
> For elevel=ERROR,
> After hitting ereport inside function ReplicationSlotValidateName, the
> PG_CATCH() in 'call_string_check_hook' and process is terminated.
> Server logs are
> 2025-09-11 10:01:17.909 IST [1995206] FATAL: replication slot name
> "myslot1*" contains invalid character
> 2025-09-11 10:01:17.909 IST [1995206] HINT: Replication slot names
> may only contain lower case letters, numbers, and the underscore
> character.
>
> For level=WARNING,
> Even after hitting the ereport, it is continuing with the normal flow of
code.
> Server logs are:
> 2025-09-11 10:27:30.195 IST [2013341] WARNING: replication slot name
> "myslot1*" contains invalid character
> 2025-09-11 10:27:30.195 IST [2013341] HINT: Replication slot names
> may only contain lower case letters, numbers, and the underscore
> character.
> 2025-09-11 10:28:13.863 IST [2013341] LOG: invalid value for
> parameter "synchronized_standby_slots": "myslot1*"
> 2025-09-11 10:28:13.863 IST [2013341] FATAL: configuration file
> "/home/ubuntu/Project/inst/pg_11_9_tmp_4/bin/primary/postgresql.conf"
> contains errors
>
> I think we can use ReplicationSlotValidateName with elevel=WARNING here.
> I have attached an updated patch with this change.
>
I would suggest getting rid of the "*ok*" flag, it’s probably not needed.
I’d rather rewrite validate_sync_standby_slots() like this:
static bool
validate_sync_standby_slots(char *rawname, List **elemlist)
{
/* Verify syntax and parse string into a list of identifiers */
if (!SplitIdentifierString(rawname, ',', elemlist))
GUC_check_errdetail("List syntax is invalid.");
else
{
foreach_ptr(char, name, *elemlist)
{
if (!ReplicationSlotValidateName(name, false, WARNING))
return false;
}
}
return true;
}
--
With Regards,
Ashutosh Sharma.