Re: Fix slot synchronization with two_phase decoding enabled
Dilip Kumar <dilipbalaut@gmail.com>
From: Dilip Kumar <dilipbalaut@gmail.com>
To: Nisha Moond <nisha.moond412@gmail.com>
Cc: Amit Kapila <amit.kapila16@gmail.com>,
Masahiko Sawada <sawada.mshk@gmail.com>, shveta malik <shveta.malik@gmail.com>,
"Zhijie Hou (Fujitsu)" <houzj.fnst@fujitsu.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-06-05T09:56:26Z
Lists: pgsql-hackers
On Thu, Jun 5, 2025 at 2:53 PM Dilip Kumar <dilipbalaut@gmail.com> wrote:
>
> On Tue, Jun 3, 2025 at 11:05 AM Nisha Moond <nisha.moond412@gmail.com> wrote:
> >
> >
> > Attached v17 patches. Added a top-up patch 0002 implementing the idea
> > suggested by Amit above.
>
> I have started reviewing this, although I haven't done a complete
> review yet, but I have a question on the fix we are trying to do, IIUC
> we are disallowing to use 'two phase' and 'failover' options together
> at the create slot time and now users has to create slot with one of
> the option and later enable other option right (if user want to use
> both options)? But don't you think it will affect usability? because
> if a user wants to use both the options together then after creating
> the slot they need to track when is the right time to enable the other
> option? Not sure if anyone else has this concern or it's just me?
>
Some additional comments while quickly glancing at the patch
1.
+ if (two_phase && !IsSyncingReplicationSlots() && !IsBinaryUpgrade)
+ ereport(ERROR,
+ errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("cannot enable both \"%s\" and \"%s\" options during
replication slot creation",
+ "failover", "two_phase"));
I think we should also give hints to retry later when a certain
constraint is met?
Also this is hardcoded options "failover" and "two_phase" so why do we
need to use %s for contruncting this error message?
2.
+ "failover", "two_phase"),
+ errhint("Use ALTER SUBSCRIPTION ... SET (failover = true) to enable
\"%s\" after two_phase state is ready",
+ "failover"));
Here we are using a mix of hardcoded string and formatted string, like
for (failover = true) we hardcoded the "failover" whereas to enable
\"%s\", we have
used %s. Better to just directly use failover as we are not depending
on any variable. Please look at other places as well, I see a few
more places whereas
we have used like this.
3. + if (slot->data.failover)
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("cannot enable two-phase decoding for failover enabled slot \"%s\"",
+ NameStr(slot->data.name))));
So for a failover slot we can never enable two_phase, whereas for
two_phase enabled slot we can enable failover? This seems confusing,
no?
--
Regards,
Dilip Kumar
Google
Commits
-
Don't retreat slot's confirmed_flush LSN.
- ad5eaf390c58 18.0 landed
- 7318f241d29c 17.6 landed
- c0f51fde534d 16.10 landed
- 9d1a62359606 15.14 landed
- e68459489c20 14.19 landed
- e323d9df002d 13.22 landed
-
Fix assertion failure during decoding from synced slots.
- 3ff2a1f0c9e8 18.0 landed
-
Fix xmin advancement during fast_forward decoding.
- d65485b02b1f 13.21 landed
- aaf9e95e8764 18.0 landed
- 36148b22ee09 17.5 landed
- 21a7caeeb948 16.9 landed
- f6429bd7db5e 15.13 landed
- 1f63b3626a52 14.18 landed
-
Fix slot synchronization for two_phase enabled slots.
- 4868c96bc8c6 18.0 landed
-
Again match pg_user_mappings to information_schema.user_mapping_options.
- b6e39ca92eee 9.4.13 cited