| From: | Ashutosh Bapat <ashutosh(dot)bapat(dot)oss(at)gmail(dot)com> |
|---|---|
| To: | Heikki Linnakangas <hlinnaka(at)iki(dot)fi> |
| Cc: | Maxim Orlov <orlovmg(at)gmail(dot)com>, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, Alexander Korotkov <aekorotkov(at)gmail(dot)com>, wenhui qiu <qiuwenhuifx(at)gmail(dot)com>, Postgres hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
| Subject: | Re: POC: make mxidoff 64 bits |
| Date: | 2025-12-08 15:50:23 |
| Message-ID: | CAExHW5uodjif=JBfB3_rFt4hx-rgPfveAtESCkg1dw-qxk5uMw@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Mon, Dec 8, 2025 at 6:32 PM Heikki Linnakangas <hlinnaka(at)iki(dot)fi> wrote:
>
> On 06/12/2025 01:36, Heikki Linnakangas wrote:
> > On 05/12/2025 15:42, Ashutosh Bapat wrote:
> >> + $newnode->start;
> >> + my $new_dump = get_dump_for_comparison($newnode, "newnode_${tag}
> >> _dump");
> >> + $newnode->stop;
> >>
> >>
> >> There is no code which actually looks at the multixact offsets here to
> >> make sure that the conversion happened correctly. I guess the test
> >> relies on visibility checks for that. Anyway, we need a comment
> >> explaining why just comparing the contents of the table is enough to
> >> ensure correct conversion. Better if we can add an explicit test that
> >> the offsets were converted correctly. I don't have any idea of how to
> >> do that right now, though. Maybe use pg_get_multixact_members()
> >> somehow in the query to extract data out of the table?
> >
> > Agreed, the verification here is quite weak. I didn't realize that
> > pg_get_multixact_members() exists! That might indeed be handy here, but
> > I'm not sure how exactly to construct the test. A direct C function like
> > test_create_multixact() in test_multixact.c would be handy here, but
> > we'd need to compile and do run that in the old cluster, which seems
> > difficult.
>
> I added verification of all the multixids between oldest and next
> multixid, using pg_get_multixact_members(). The test now calls
> pg_get_multixact_members() for all updating multixids in the range,
> before and after the upgrade, and compares the results.
I thought about adding pg_get_multixact_member in
get_test_table_contents() itself like SELECT ctid, xmin, xmax,
get_multixact_member(xmin), get_multixact_member(xmax) * FROM
mxofftest; but then I realized that the UPDATE would replace mxids by
actual transaction ids in the visible rows. So that can't be used.
What you have done doesn't have that drawback, but it's also not
checking whether the multixids in (invisible) rows are reachable in
offsets and members. But probably that's too hard to do and is covered
by visibility checks.
--
Best Wishes,
Ashutosh Bapat
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Nathan Bossart | 2025-12-08 15:53:40 | Re: unifying error messages |
| Previous Message | Álvaro Herrera | 2025-12-08 15:47:17 | unifying error messages |