Re: [Proposal] Adding callback support for custom statistics kinds

Chao Li <li.evan.chao@gmail.com>

From: Chao Li <li.evan.chao@gmail.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: Sami Imseih <samimseih@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-12-09T05:35:47Z
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 →
  1. Fix const correctness in pgstat data serialization callbacks

  2. test_custom_stats: Add tests with read/write of auxiliary data

  3. Allow cumulative statistics to read/write auxiliary data from/to disk

  4. test_custom_stats: Test module for custom cumulative statistics

  5. injection_points: Remove portions related to custom pgstats

  6. Rename routines for write/read of pgstats file


> On Dec 9, 2025, at 13:23, Chao Li <li.evan.chao@gmail.com> wrote:
> 
> 
> 
>> On Dec 9, 2025, at 12:45, Michael Paquier <michael@paquier.xyz> wrote:
>> 
>> It seems to me that you are missing nothing here, and that Chao has
>> missed the fact that the end of pgstat_read_statsfile() does a "goto
>> done", meaning that we would take a round of
> 
> No, I didn’t miss that part. But in the “done” clause:
> 
> ```
> done:
> /* First, cleanup the main stats file, PGSTAT_STAT_PERMANENT_FILENAME */
> FreeFile(fpin);
> 
> elog(DEBUG2, "removing permanent stats file \"%s\"", statfile);
> unlink(statfile);
> 
> /* Let each stats kind run its cleanup callback, if it provides one */
> for (PgStat_Kind kind = PGSTAT_KIND_MIN; kind <= PGSTAT_KIND_MAX; kind++)
> {
> const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind);
> 
> if (kind_info && kind_info->end_extra_stats)
> kind_info->end_extra_stats(STATS_READ);
> }
> ```
> 
> end_extra_stats(STATS_READ) has no failure indication.
> 

Sorry, I incidentally clicked “send” too quickly.

My point is that, there are many places jumping to “error”, then from “error” goto “done”, if an error didn’t happen from the deserialize callback, how end_extra_stats() can know if failure happened and takes action accordingly?

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