1
0
mirror of https://github.com/postgres/postgres.git synced 2025-12-19 17:02:53 +03:00

Fix const correctness in pgstat data serialization callbacks

4ba012a8ed defined the "header" (pointer to the stats data) of
from_serialized_data() as a const, even though it is fine (and
expected!) for the callback to modify the shared memory entry when
loading the stats at startup.

While on it, this commit updates the callback to_serialized_data() in
the test module test_custom_stats to make the data extracted from the
"header" parameter a const since it should never be modified: the stats
are written to disk and no modifications are expected in the shared
memory entry.

This clarifies the API contract of these new callbacks.

Reported-By: Peter Eisentraut <peter@eisentraut.org>
Author: Michael Paquier <michael@paquier.xyz>
Co-authored-by: Sami Imseih <samimseih@gmail.com>
Discussion: https://postgr.es/m/d87a93b0-19c7-4db6-b9c0-d6827e7b2da1@eisentraut.org
This commit is contained in:
Michael Paquier
2025-12-18 07:33:40 +09:00
parent ab8af1db43
commit 167cb26718
2 changed files with 6 additions and 5 deletions

View File

@@ -329,13 +329,14 @@ typedef struct PgStat_KindInfo
* *
* "statfile" is a pointer to the on-disk stats file, named * "statfile" is a pointer to the on-disk stats file, named
* PGSTAT_STAT_PERMANENT_FILENAME. "key" is the hash key of the entry * PGSTAT_STAT_PERMANENT_FILENAME. "key" is the hash key of the entry
* just written or read. "header" is a pointer to the stats data. * just written or read. "header" is a pointer to the stats data; it may
* be modified only in from_serialized_data to reconstruct an entry.
*/ */
void (*to_serialized_data) (const PgStat_HashKey *key, void (*to_serialized_data) (const PgStat_HashKey *key,
const PgStatShared_Common *header, const PgStatShared_Common *header,
FILE *statfile); FILE *statfile);
bool (*from_serialized_data) (const PgStat_HashKey *key, bool (*from_serialized_data) (const PgStat_HashKey *key,
const PgStatShared_Common *header, PgStatShared_Common *header,
FILE *statfile); FILE *statfile);
/* /*

View File

@@ -92,7 +92,7 @@ static void test_custom_stats_var_to_serialized_data(const PgStat_HashKey *key,
/* Deserialization callback: read auxiliary entry data */ /* Deserialization callback: read auxiliary entry data */
static bool test_custom_stats_var_from_serialized_data(const PgStat_HashKey *key, static bool test_custom_stats_var_from_serialized_data(const PgStat_HashKey *key,
const PgStatShared_Common *header, PgStatShared_Common *header,
FILE *statfile); FILE *statfile);
/* Finish callback: end of statistics file operations */ /* Finish callback: end of statistics file operations */
@@ -196,7 +196,7 @@ test_custom_stats_var_to_serialized_data(const PgStat_HashKey *key,
{ {
char *description; char *description;
size_t len; size_t len;
PgStatShared_CustomVarEntry *entry = (PgStatShared_CustomVarEntry *) header; const PgStatShared_CustomVarEntry *entry = (const PgStatShared_CustomVarEntry *) header;
bool found; bool found;
uint32 magic_number = TEST_CUSTOM_VAR_MAGIC_NUMBER; uint32 magic_number = TEST_CUSTOM_VAR_MAGIC_NUMBER;
@@ -276,7 +276,7 @@ test_custom_stats_var_to_serialized_data(const PgStat_HashKey *key,
*/ */
static bool static bool
test_custom_stats_var_from_serialized_data(const PgStat_HashKey *key, test_custom_stats_var_from_serialized_data(const PgStat_HashKey *key,
const PgStatShared_Common *header, PgStatShared_Common *header,
FILE *statfile) FILE *statfile)
{ {
PgStatShared_CustomVarEntry *entry; PgStatShared_CustomVarEntry *entry;