Re: Fix locking issue with fixed-size stats template in injection_points - Mailing list pgsql-hackers

From wenhui qiu
Subject Re: Fix locking issue with fixed-size stats template in injection_points
Date
Msg-id CAGjGUAKX-q+TKi8eFEG3Nvc2g0GZsXQgZ=P07oy67XOYK0hbiQ@mail.gmail.com
Whole thread Raw
In response to Re: Fix locking issue with fixed-size stats template in injection_points  (Chao Li <li.evan.chao@gmail.com>)
List pgsql-hackers
HI
This patch looks good to me.

The issue is clear: unlike other fixed-size stats kinds (archiver, bgwriter, checkpointer), the injection_points stats can be updated concurrently by multiple backends. Without synchronization, this can lead to inconsistent changecount state and assertion failures in pgstat_begin_changecount_write(), as shown in your reproduction.



Thanks

On Mon, Sep 29, 2025 at 3:29 PM Chao Li <li.evan.chao@gmail.com> wrote:


On Sep 29, 2025, at 14:27, Michael Paquier <michael@paquier.xyz> wrote:

On Mon, Sep 29, 2025 at 09:46:05AM +0800, Chao Li wrote:
I saw pg_state_begin_changecount_write() is called multiple places,
as you mention, for example bgwriter.

I've mentioned that in my first email, and put in details:
- pgstat_report_bgwriter() is called once, by the bgwriter.
- pgstat_report_checkpointer() is called three time, all by the
checkpointer.
- pgstat_report_archiver() is called twice, all by pgarch.c.

So all of them don't have a problem, two calls cannot happen
concurrently.
--
Michael

Thanks for the clarification. Then the patch looks good to me.

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/




pgsql-hackers by date:

Previous
From: jian he
Date:
Subject: Re: bug, ALTER TABLE call ATPostAlterTypeCleanup twice for the same relation
Next
From: Michael Paquier
Date:
Subject: Re: Fix locking issue with fixed-size stats template in injection_points