postgres.git / summary / log / commit / refs

commit    b757abefc0419c9b742222e1dfe70c73aff67364
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Mon Dec 30 09:48:18 2024 +0000
First released in: 18.0

    injection_points: Tweak variable-numbered stats to work with pending data
    
    As coded, the module was not using pending entries to store its data
    locally before doing a flush to the central dshash with a timed
    pgstat_report_stat() call.  Hence, the flush callback was defined, but
    finished by being not used.  As a template, this is more efficient than
    the original logic of updating directly the shared memory entries as
    this reduces the interactions that need to be done with the pgstats
    hash table in shared memory.
    
    injection_stats_flush_cb() was also missing a pgstat_unlock_entry(), so
    add one, while on it.
    
    Reviewed-by: Bertrand Drouvot
    Discussion: https://postgr.es/m/Z3JbLhKFFm6kKfT8@ip-10-97-1-34.eu-west-3.compute.internal


src/test/modules/injection_points/injection_stats.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/test/modules/injection_points/injection_stats.c b/src/test/modules/injection_points/injection_stats.c index e16b9db2845..21d5c10f397 100644 --- a/src/test/modules/injection_points/injection_stats.c +++ b/src/test/modules/injection_points/injection_stats.c @@ -80,6 +80,9 @@ injection_stats_flush_cb(PgStat_EntryRef *entry_ref, bool nowait) return false; shfuncent->stats.numcalls += localent->numcalls; + + pgstat_unlock_entry(entry_ref); + return true; } @@ -127,13 +130,13 @@ pgstat_create_inj(const char *name) if (!inj_stats_loaded || !inj_stats_enabled) return; - entry_ref = pgstat_get_entry_ref_locked(PGSTAT_KIND_INJECTION, InvalidOid, - PGSTAT_INJ_IDX(name), false); + entry_ref = pgstat_prep_pending_entry(PGSTAT_KIND_INJECTION, InvalidOid, + PGSTAT_INJ_IDX(name), NULL); + shstatent = (PgStatShared_InjectionPoint *) entry_ref->shared_stats; /* initialize shared memory data */ memset(&shstatent->stats, 0, sizeof(shstatent->stats)); - pgstat_unlock_entry(entry_ref); } /* @@ -168,16 +171,14 @@ pgstat_report_inj(const char *name) if (!inj_stats_loaded || !inj_stats_enabled) return; - entry_ref = pgstat_get_entry_ref_locked(PGSTAT_KIND_INJECTION, InvalidOid, - PGSTAT_INJ_IDX(name), false); + 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; /* Update the injection point statistics */ statent->numcalls++; - - pgstat_unlock_entry(entry_ref); } /* [parent: c9b3d4909bbf]