From: | Fujii Masao <masao(dot)fujii(at)oss(dot)nttdata(dot)com> |
---|---|
To: | Daniil Davydov <3danissimo(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: [BUG] Skipped initialization of some xl_xact_parsed_prepare fields |
Date: | 2025-05-15 11:30:14 |
Message-ID: | 384abde1-c1ba-41ac-a358-37f55295dbd0@oss.nttdata.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 2025/05/15 14:39, Daniil Davydov wrote:
> Hi,
> I noticed that inside ParsePrepareRecord function we are missing
> initialization of `nstats` and `nabortstats` fields of
> xl_xact_parsed_prepare structure:
> *** (current code in master)
> memset(parsed, 0, sizeof(*parsed));
>
> parsed->xact_time = xlrec->prepared_at;
> parsed->origin_lsn = xlrec->origin_lsn;
> parsed->origin_timestamp = xlrec->origin_timestamp;
> parsed->twophase_xid = xlrec->xid;
> parsed->dbId = xlrec->database;
> parsed->nsubxacts = xlrec->nsubxacts;
> parsed->nrels = xlrec->ncommitrels;
> parsed->nabortrels = xlrec->nabortrels;
> parsed->nmsgs = xlrec->ninvalmsgs;
> ***
>
> Thus, they will always be 0 after calling the ParsePrepareRecord
> function, but `stats` and `abortstats` pointers are set correctly:
> *** (current code in master)
> parsed->stats = (xl_xact_stats_item *) bufptr;
> bufptr += MAXALIGN(xlrec->ncommitstats * sizeof(xl_xact_stats_item));
>
> parsed->abortstats = (xl_xact_stats_item *) bufptr;
> bufptr += MAXALIGN(xlrec->nabortstats * sizeof(xl_xact_stats_item));
> ***
>
> If we look (for example) on parsing of a commit record, we could see
> that both `nstats` and `stats` fields are set inside the
> ParseCommitRecord function.
> For now, zeroed number of stats lead to invalid output of
> `xact_desc_prepare`, because it relies on values of `nstats` and
> `nabortstats` fields:
> *** (current code in master)
> xact_desc_stats(buf, "commit ", parsed.nstats, parsed.stats);
> xact_desc_stats(buf, "abort ", parsed.nabortstats, parsed.abortstats);
> ***
Thanks for the report! You're right.
> I suppose to add initialization of `nstats` and `nabortstats` to
> ParsePrepareRecord (see attached patch).
LGTM. Barring any objection, I will commit this patch.
Regards,
--
Fujii Masao
Advanced Computing Technology Center
Research and Development Headquarters
NTT DATA CORPORATION
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Kapila | 2025-05-15 12:32:40 | Re: Conflict detection for update_deleted in logical replication |
Previous Message | Richard Guo | 2025-05-15 10:57:27 | Re: Assertion failure in smgr.c when using pg_prewarm with partitioned tables |