summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2025-09-17 10:15:13 +0900
committerMichael Paquier <michael@paquier.xyz>2025-09-17 10:15:13 +0900
commit39f67d9b554fcd6dfb6c4f02a4af757eecd1fecf (patch)
tree4e1a2db6cb37e8b3473e492b360b5499fa3016fb
parent158c48303e8ae0248d7d95b60b56dd67e7033c48 (diff)
injection_points: Fix incrementation of variable-numbered stats
The pending entry was not used when incrementing its data, directly manipulating the shared memory pointer, without even locking it. This could mean losing statistics under concurrent activity. The flush callback was a no-op. This code serves as a base template for extensions for the custom cumulative statistics, so let's be clean and use a pending entry for the incrementations, whose data is then flushed to the corresponding entry in the shared hashtable when all the stats are reported, in its own flush callback. Author: Sami Imseih <samimseih@gmail.com> Discussion: https://postgr.es/m/CAA5RZ0v0U0yhPbY+bqChomkPbyUrRQ3rQXnZf_SB-svDiQOpgQ@mail.gmail.com Backpatch-through: 18
-rw-r--r--src/test/modules/injection_points/injection_stats.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/src/test/modules/injection_points/injection_stats.c b/src/test/modules/injection_points/injection_stats.c
index e3947b23ba5..ca8df4ad217 100644
--- a/src/test/modules/injection_points/injection_stats.c
+++ b/src/test/modules/injection_points/injection_stats.c
@@ -164,8 +164,7 @@ void
pgstat_report_inj(const char *name)
{
PgStat_EntryRef *entry_ref;
- PgStatShared_InjectionPoint *shstatent;
- PgStat_StatInjEntry *statent;
+ PgStat_StatInjEntry *pending;
/* leave if disabled */
if (!inj_stats_loaded || !inj_stats_enabled)
@@ -174,11 +173,10 @@ pgstat_report_inj(const char *name)
entry_ref = pgstat_prep_pending_entry(PGSTAT_KIND_INJECTION, InvalidOid,
PGSTAT_INJ_IDX(name), NULL);
- shstatent = (PgStatShared_InjectionPoint *) entry_ref->shared_stats;
- statent = &shstatent->stats;
+ pending = (PgStat_StatInjEntry *) entry_ref->pending;
- /* Update the injection point statistics */
- statent->numcalls++;
+ /* Update the injection point pending statistics */
+ pending->numcalls++;
}
/*