Re: Skipping logical replication transactions on subscriber side

From: Noah Misch <noah(at)leadboat(dot)com>
To: Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>
Cc: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, Euler Taveira <euler(at)eulerto(dot)com>, "osumi(dot)takamichi(at)fujitsu(dot)com" <osumi(dot)takamichi(at)fujitsu(dot)com>, Peter Eisentraut <peter(dot)eisentraut(at)enterprisedb(dot)com>, "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>, "tanghy(dot)fnst(at)fujitsu(dot)com" <tanghy(dot)fnst(at)fujitsu(dot)com>, vignesh C <vignesh21(at)gmail(dot)com>, Greg Nancarrow <gregn4422(at)gmail(dot)com>, "houzj(dot)fnst(at)fujitsu(dot)com" <houzj(dot)fnst(at)fujitsu(dot)com>, Alexey Lesovsky <lesovsky(at)gmail(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Skipping logical replication transactions on subscriber side
Date: 2022-04-04 02:31:28
Message-ID: 20220404023128.GA3799006@rfd.leadboat.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Mon, Apr 04, 2022 at 10:28:30AM +0900, Masahiko Sawada wrote:
> On Sun, Apr 3, 2022 at 9:45 AM Noah Misch <noah(at)leadboat(dot)com> wrote:
> > On Sat, Apr 02, 2022 at 08:44:45PM +0900, Masahiko Sawada wrote:
> > > On Sat, Apr 2, 2022 at 7:04 PM Amit Kapila <amit(dot)kapila16(at)gmail(dot)com> wrote:
> > > > On Sat, Apr 2, 2022 at 1:43 PM Noah Misch <noah(at)leadboat(dot)com> wrote:
> > > > > Some options:
> > > > > - Move subskiplsn after subdbid, so it's always aligned anyway. I've
> > > > > confirmed that this lets the test pass, in 44s.

> --- a/src/include/catalog/pg_subscription.h
> +++ b/src/include/catalog/pg_subscription.h
> @@ -54,6 +54,17 @@ CATALOG(pg_subscription,6100,SubscriptionRelationId) BKI_SHARED_RELATION BKI_ROW
>
> Oid subdbid BKI_LOOKUP(pg_database); /* Database the
> * subscription is in. */
> +
> + /*
> + * All changes finished at this LSN are skipped.
> + *
> + * Note that XLogRecPtr, pg_lsn in the catalog, is 8-byte alignment
> + * (TYPALIGN_DOUBLE) and it does not match the alignment on some platforms
> + * such as AIX. Therefore subskiplsn needs to be placed here so it is
> + * always aligned.

I'm reading this comment as saying that TYPALIGN_DOUBLE is always 8 bytes, but
the problem arises precisely because TYPALIGN_DOUBLE==4 on AIX.

On most hosts, the C alignment of an XLogRecPtr is 8 bytes, and
TYPALIGN_DOUBLE==8. On AIX, C alignment is still 8 bytes, but
TYPALIGN_DOUBLE==4. The tuples on disk and in shared buffers use
TYPALIGN_DOUBLE to decide how much padding to insert, and that amount of
padding needs to match the C alignment padding. Placing the field here
reduces the padding to zero, making that invariant hold trivially.

> + */
> + XLogRecPtr subskiplsn;
> +
> NameData subname; /* Name of the subscription */
>
> Oid subowner BKI_LOOKUP(pg_authid); /* Owner of the subscription */
> @@ -71,9 +82,6 @@ CATALOG(pg_subscription,6100,SubscriptionRelationId) BKI_SHARED_RELATION BKI_ROW
> bool subdisableonerr; /* True if a worker error should cause the
> * subscription to be disabled */
>
> - XLogRecPtr subskiplsn; /* All changes finished at this LSN are
> - * skipped */

Some code sites list pg_subscription fields in field order. Please update
them so they continue to list fields in field order. CreateSubscription() is
one example.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Julien Rouhaud 2022-04-04 02:31:45 Re: [PATCH] Tracking statements entry timestamp in pg_stat_statements
Previous Message Peter Geoghegan 2022-04-04 02:10:18 Re: Run pg_amcheck in 002_pg_upgrade.pl and 027_stream_regress.pl?