RE: Time delayed LR (WAS Re: logical replication restrictions) - Mailing list pgsql-hackers
From | Takamichi Osumi (Fujitsu) |
---|---|
Subject | RE: Time delayed LR (WAS Re: logical replication restrictions) |
Date | |
Msg-id | TYCPR01MB83733699D782F9B1BD8E7399EDC59@TYCPR01MB8373.jpnprd01.prod.outlook.com Whole thread Raw |
In response to | Re: Time delayed LR (WAS Re: logical replication restrictions) (vignesh C <vignesh21@gmail.com>) |
List | pgsql-hackers |
Hi, On Thursday, January 19, 2023 7:55 PM vignesh C <vignesh21@gmail.com> wrote: > On Thu, 19 Jan 2023 at 12:06, Takamichi Osumi (Fujitsu) > <osumi.takamichi@fujitsu.com> wrote: > > > > Updated the comment and the function call. > > > > Kindly have a look at the updated patch v17. > > Thanks for the updated patch, few comments: > 1) min_apply_delay was accepting values like '600 m s h', I was not sure if we > should allow this: > alter subscription sub1 set (min_apply_delay = ' 600 m s h'); > > + /* > + * If no unit was specified, then explicitly > add 'ms' otherwise > + * the interval_in function would assume 'seconds'. > + */ > + if (strspn(tmp, "-0123456789 ") == strlen(tmp)) > + val = psprintf("%sms", tmp); > + else > + val = tmp; > + > + interval = > DatumGetIntervalP(DirectFunctionCall3(interval_in, > + > > CStringGetDatum(val), > + > > ObjectIdGetDatum(InvalidOid), > + > Int32GetDatum(-1))); > FYI, the input can be accepted by the interval type. Now we changed the direction of the type from interval to integer but plus some unit can be added like recovery_min_apply_delay. Please check. > 3) There is one check at parse_subscription_options and another check in > AlterSubscription, this looks like a redundant check in case of alter > subscription, can we try to merge and keep in one place: > /* > * The combination of parallel streaming mode and min_apply_delay is not > * allowed. > */ > if (IsSet(supported_opts, SUBOPT_MIN_APPLY_DELAY) && > opts->min_apply_delay > 0) > { > if (opts->streaming == LOGICALREP_STREAM_PARALLEL) ereport(ERROR, > errcode(ERRCODE_SYNTAX_ERROR), errmsg("%s and %s are mutually > exclusive options", > "min_apply_delay > 0", "streaming = parallel")); } > > if (IsSet(opts.specified_opts, SUBOPT_MIN_APPLY_DELAY)) { > /* > * The combination of parallel streaming mode and > * min_apply_delay is not allowed. > */ > if (opts.min_apply_delay > 0) > if ((IsSet(opts.specified_opts, SUBOPT_STREAMING) && opts.streaming == > LOGICALREP_STREAM_PARALLEL) || > (!IsSet(opts.specified_opts, SUBOPT_STREAMING) && sub->stream == > LOGICALREP_STREAM_PARALLEL)) > ereport(ERROR, > errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), > errmsg("cannot enable %s for subscription in %s mode", > "min_apply_delay", "streaming = parallel")); > > values[Anum_pg_subscription_subminapplydelay - 1] = > Int64GetDatum(opts.min_apply_delay); > replaces[Anum_pg_subscription_subminapplydelay - 1] = true; } We can't. For create subscription, we need to check the patch from parse_subscription_options, while for alter subscription, we need to refer the current MySubscription value for those tests in AlterSubscription. > 4) typo "execeeds" should be "exceeds" > > + time on the subscriber. Any overhead of time spent in > logical decoding > + and in transferring the transaction may reduce the actual wait time. > + It is also possible that the overhead already execeeds the > requested > + <literal>min_apply_delay</literal> value, in which case no > additional > + wait is necessary. If the system clocks on publisher and subscriber > + are not synchronized, this may lead to apply changes earlier > + than Fixed. Kindly have a look at the v18 patch in [1]. [1] - https://www.postgresql.org/message-id/TYCPR01MB8373BED9E390C4839AF56685EDC59%40TYCPR01MB8373.jpnprd01.prod.outlook.com Best Regards, Takamichi Osumi
pgsql-hackers by date: