diff options
5 files changed, 45 insertions, 13 deletions
diff --git a/src/test/modules/injection_points/injection_points--1.0.sql b/src/test/modules/injection_points/injection_points--1.0.sql index 1b2a4938a95..6c81d55e0d3 100644 --- a/src/test/modules/injection_points/injection_points--1.0.sql +++ b/src/test/modules/injection_points/injection_points--1.0.sql @@ -91,7 +91,9 @@ LANGUAGE C STRICT; -- Reports fixed-numbered statistics for injection points. CREATE FUNCTION injection_points_stats_fixed(OUT numattach int8, OUT numdetach int8, - OUT numrun int8) + OUT numrun int8, + OUT numcached int8, + OUT numloaded int8) RETURNS record AS 'MODULE_PATHNAME', 'injection_points_stats_fixed' LANGUAGE C STRICT; diff --git a/src/test/modules/injection_points/injection_points.c b/src/test/modules/injection_points/injection_points.c index dc02be1bbf6..4e775c7ec60 100644 --- a/src/test/modules/injection_points/injection_points.c +++ b/src/test/modules/injection_points/injection_points.c @@ -297,7 +297,7 @@ injection_points_attach(PG_FUNCTION_ARGS) condition.pid = MyProcPid; } - pgstat_report_inj_fixed(1, 0, 0); + pgstat_report_inj_fixed(1, 0, 0, 0, 0); InjectionPointAttach(name, "injection_points", function, &condition, sizeof(InjectionPointCondition)); @@ -329,6 +329,7 @@ injection_points_load(PG_FUNCTION_ARGS) if (inj_state == NULL) injection_init_shmem(); + pgstat_report_inj_fixed(0, 0, 0, 0, 1); INJECTION_POINT_LOAD(name); PG_RETURN_VOID(); @@ -343,7 +344,7 @@ injection_points_run(PG_FUNCTION_ARGS) { char *name = text_to_cstring(PG_GETARG_TEXT_PP(0)); - pgstat_report_inj_fixed(0, 0, 1); + pgstat_report_inj_fixed(0, 0, 1, 0, 0); INJECTION_POINT(name); PG_RETURN_VOID(); @@ -358,6 +359,7 @@ injection_points_cached(PG_FUNCTION_ARGS) { char *name = text_to_cstring(PG_GETARG_TEXT_PP(0)); + pgstat_report_inj_fixed(0, 0, 0, 1, 0); INJECTION_POINT_CACHED(name); PG_RETURN_VOID(); @@ -434,7 +436,7 @@ injection_points_detach(PG_FUNCTION_ARGS) { char *name = text_to_cstring(PG_GETARG_TEXT_PP(0)); - pgstat_report_inj_fixed(0, 1, 0); + pgstat_report_inj_fixed(0, 1, 0, 0, 0); if (!InjectionPointDetach(name)) elog(ERROR, "could not detach injection point \"%s\"", name); diff --git a/src/test/modules/injection_points/injection_stats.h b/src/test/modules/injection_points/injection_stats.h index d519f29f832..126c1101691 100644 --- a/src/test/modules/injection_points/injection_stats.h +++ b/src/test/modules/injection_points/injection_stats.h @@ -25,6 +25,8 @@ extern void pgstat_report_inj(const char *name); extern void pgstat_register_inj_fixed(void); extern void pgstat_report_inj_fixed(uint32 numattach, uint32 numdetach, - uint32 numrun); + uint32 numrun, + uint32 numcached, + uint32 numloaded); #endif diff --git a/src/test/modules/injection_points/injection_stats_fixed.c b/src/test/modules/injection_points/injection_stats_fixed.c index 72a5f9decb9..82b07e5332f 100644 --- a/src/test/modules/injection_points/injection_stats_fixed.c +++ b/src/test/modules/injection_points/injection_stats_fixed.c @@ -29,6 +29,8 @@ typedef struct PgStat_StatInjFixedEntry PgStat_Counter numattach; /* number of points attached */ PgStat_Counter numdetach; /* number of points detached */ PgStat_Counter numrun; /* number of points run */ + PgStat_Counter numcached; /* number of points cached */ + PgStat_Counter numloaded; /* number of points loaded */ TimestampTz stat_reset_timestamp; } PgStat_StatInjFixedEntry; @@ -114,6 +116,8 @@ injection_stats_fixed_snapshot_cb(void) FIXED_COMP(numattach); FIXED_COMP(numdetach); FIXED_COMP(numrun); + FIXED_COMP(numcached); + FIXED_COMP(numloaded); #undef FIXED_COMP } @@ -135,7 +139,9 @@ pgstat_register_inj_fixed(void) void pgstat_report_inj_fixed(uint32 numattach, uint32 numdetach, - uint32 numrun) + uint32 numrun, + uint32 numcached, + uint32 numloaded) { PgStatShared_InjectionPointFixed *stats_shmem; @@ -149,6 +155,8 @@ pgstat_report_inj_fixed(uint32 numattach, stats_shmem->stats.numattach += numattach; stats_shmem->stats.numdetach += numdetach; stats_shmem->stats.numrun += numrun; + stats_shmem->stats.numcached += numcached; + stats_shmem->stats.numloaded += numloaded; pgstat_end_changecount_write(&stats_shmem->changecount); } @@ -160,8 +168,8 @@ Datum injection_points_stats_fixed(PG_FUNCTION_ARGS) { TupleDesc tupdesc; - Datum values[3] = {0}; - bool nulls[3] = {0}; + Datum values[5] = {0}; + bool nulls[5] = {0}; PgStat_StatInjFixedEntry *stats; if (!inj_fixed_loaded) @@ -171,21 +179,29 @@ injection_points_stats_fixed(PG_FUNCTION_ARGS) stats = pgstat_get_custom_snapshot_data(PGSTAT_KIND_INJECTION_FIXED); /* Initialise attributes information in the tuple descriptor */ - tupdesc = CreateTemplateTupleDesc(3); + tupdesc = CreateTemplateTupleDesc(5); TupleDescInitEntry(tupdesc, (AttrNumber) 1, "numattach", INT8OID, -1, 0); TupleDescInitEntry(tupdesc, (AttrNumber) 2, "numdetach", INT8OID, -1, 0); TupleDescInitEntry(tupdesc, (AttrNumber) 3, "numrun", INT8OID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 4, "numcached", + INT8OID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 5, "numloaded", + INT8OID, -1, 0); BlessTupleDesc(tupdesc); values[0] = Int64GetDatum(stats->numattach); values[1] = Int64GetDatum(stats->numdetach); values[2] = Int64GetDatum(stats->numrun); + values[3] = Int64GetDatum(stats->numcached); + values[4] = Int64GetDatum(stats->numloaded); nulls[0] = false; nulls[1] = false; nulls[2] = false; + nulls[3] = false; + nulls[4] = false; /* Returns the record as Datum */ PG_RETURN_DATUM(HeapTupleGetDatum(heap_form_tuple(tupdesc, values, nulls))); diff --git a/src/test/modules/injection_points/t/001_stats.pl b/src/test/modules/injection_points/t/001_stats.pl index 7897691f954..0d72cd86df7 100644 --- a/src/test/modules/injection_points/t/001_stats.pl +++ b/src/test/modules/injection_points/t/001_stats.pl @@ -35,16 +35,26 @@ my $numcalls = $node->safe_psql('postgres', is($numcalls, '2', 'number of stats calls'); my $fixedstats = $node->safe_psql('postgres', "SELECT * FROM injection_points_stats_fixed();"); -is($fixedstats, '1|0|2', 'number of fixed stats'); +is($fixedstats, '1|0|2|0|0', 'fixed stats after some calls'); + +# Loading and caching. +$node->safe_psql( + 'postgres', " +SELECT injection_points_load('stats-notice'); +SELECT injection_points_cached('stats-notice'); +"); +$fixedstats = $node->safe_psql('postgres', + "SELECT * FROM injection_points_stats_fixed();"); +is($fixedstats, '1|0|2|1|1', 'fixed stats after loading and caching'); # Restart the node cleanly, stats should still be around. $node->restart; $numcalls = $node->safe_psql('postgres', "SELECT injection_points_stats_numcalls('stats-notice');"); -is($numcalls, '2', 'number of stats after clean restart'); +is($numcalls, '3', 'number of stats after clean restart'); $fixedstats = $node->safe_psql('postgres', "SELECT * FROM injection_points_stats_fixed();"); -is($fixedstats, '1|0|2', 'number of fixed stats after clean restart'); +is($fixedstats, '1|0|2|1|1', 'fixed stats after clean restart'); # On crash the stats are gone. $node->stop('immediate'); @@ -54,6 +64,6 @@ $numcalls = $node->safe_psql('postgres', is($numcalls, '', 'number of stats after crash'); $fixedstats = $node->safe_psql('postgres', "SELECT * FROM injection_points_stats_fixed();"); -is($fixedstats, '0|0|0', 'number of fixed stats after crash'); +is($fixedstats, '0|0|0|0|0', 'fixed stats after crash'); done_testing(); |