Re: Logical Replication of sequences - Mailing list pgsql-hackers

From shveta malik
Subject Re: Logical Replication of sequences
Date
Msg-id CAJpy0uBnVZdRLzxRELX6FRGbSidXQSAp-CZnmr48Oz03-igMCg@mail.gmail.com
Whole thread Raw
In response to Logical Replication of sequences  (Amit Kapila <amit.kapila16@gmail.com>)
Responses Re: Logical Replication of sequences
List pgsql-hackers
On Fri, Sep 20, 2024 at 9:36 AM vignesh C <vignesh21@gmail.com> wrote:
>
> On Wed, 21 Aug 2024 at 11:54, vignesh C <vignesh21@gmail.com> wrote:
> >
> > On Wed, 21 Aug 2024 at 08:33, Peter Smith <smithpb2250@gmail.com> wrote:
> > >
> > > Hi Vignesh, Here are my only review comments for the latest patch set.
> >
> > Thanks, these issues have been addressed in the updated version.
> > Additionally, I have fixed the pgindent problems that were reported
> > and included another advantage of this design in the file header of
> > the sequencesync file.
>
> The patch was not applied on top of head, here is a rebased version of
> the patches.
> I have also removed an invalidation which was  not required for
> sequences and a typo.
>

Thank You for the patches. I would like to understand srsublsn and
page_lsn more. Please see the scenario below:

I have a sequence:
CREATE SEQUENCE myseq0 INCREMENT 5 START 100;

After refresh on sub:
postgres=# ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION SEQUENCES;
ALTER SUBSCRIPTION

postgres=# select * from pg_subscription_rel;
 srsubid | srrelid | srsubstate | srsublsn
---------+---------+------------+-----------
   16385 |   16384 | r          | 0/152F380 -->pub's page_lsn


postgres=# select * from pg_sequence_state('myseq0');
 page_lsn  | last_value | log_cnt | is_called
-----------+------------+---------+-----------
 0/152D830 |        105 |      31 | t   -->(I am assuming 0/152D830 is
local page_lsn corresponding to value-=105)

Now I assume that *only* after doing next_wal for 31 times,  page_lsn
shall change. But I observe strange behaviour

After running nextval on sub for 7 times:
postgres=# select * from pg_sequence_state('myseq0');
 page_lsn  | last_value | log_cnt | is_called
-----------+------------+---------+-----------
 0/152D830 |        140 |      24 | t   -->correct

After running nextval on sub for 15 more times:
postgres=# select * from pg_sequence_state('myseq0');
 page_lsn  | last_value | log_cnt | is_called
-----------+------------+---------+-----------
 0/152D830 |        215 |       9 | t -->correct
(1 row)

Now after running it 6 more times:
postgres=# select * from pg_sequence_state('myseq0');
 page_lsn  | last_value | log_cnt | is_called
-----------+------------+---------+-----------
 0/152D990 |        245 |      28 | t --> how??

last_value increased in the expected way (6*5), but page_lsn changed
and log_cnt changed before we could complete the remaining runs as
well. Not sure why??

Now if I do refresh again:

postgres=# ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION SEQUENCES;
ALTER SUBSCRIPTION

postgres=# select * from pg_subscription_rel;
 srsubid | srrelid | srsubstate | srsublsn
---------+---------+------------+-----------
   16385 |   16384 | r          | 0/152F380-->pub's page_lsn, same as old one.

postgres=# select * from pg_sequence_state('myseq0');
 page_lsn  | last_value | log_cnt | is_called
-----------+------------+---------+-----------
 0/152DDB8 |        105 |      31 | t
(1 row)

Now, what is this page_lsn = 0/152DDB8? Should it be the one
corresponding to last_value=105 and thus shouldn't it match the
previous value of  0/152D830?

thanks
Shveta



pgsql-hackers by date:

Previous
From: Yugo NAGATA
Date:
Subject: Re: CREATE INDEX regression in 17 RC1 or expected behavior?
Next
From: Ashutosh Bapat
Date:
Subject: Re: meson and check-tests