Re: Fix locking issue with fixed-size stats template in injection_points
wenhui qiu <qiuwenhuifx@gmail.com>
From: wenhui qiu <qiuwenhuifx@gmail.com>
To: Chao Li <li.evan.chao@gmail.com>
Cc: Michael Paquier <michael@paquier.xyz>, Postgres hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-09-29T07:54:39Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
injection_points: Add proper locking when reporting fixed-variable stats
- b5f898944d12 18.1 landed
- 3cc689f833b1 19 (unreleased) landed
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/ > > > > >