Re: [BUG] Skipped initialization of some xl_xact_parsed_prepare fields - Mailing list pgsql-hackers

From Fujii Masao
Subject Re: [BUG] Skipped initialization of some xl_xact_parsed_prepare fields
Date
Msg-id 384abde1-c1ba-41ac-a358-37f55295dbd0@oss.nttdata.com
Whole thread Raw
In response to [BUG] Skipped initialization of some xl_xact_parsed_prepare fields  (Daniil Davydov <3danissimo@gmail.com>)
List 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




pgsql-hackers by date:

Previous
From: Richard Guo
Date:
Subject: Re: Assertion failure in smgr.c when using pg_prewarm with partitioned tables
Next
From: Amit Kapila
Date:
Subject: Re: Conflict detection for update_deleted in logical replication