aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2024-08-19 09:03:52 +0900
committerMichael Paquier <michael@paquier.xyz>2024-08-19 09:03:52 +0900
commit2793acecee340aa9582e0f3efe9ff6cb4b5bdf5a (patch)
tree80b6d09d5abb8a2fed29e554eb809e234c58dde1 /src
parentb10528e6cc677e4714d516d2771e5f84485b3146 (diff)
downloadpostgresql-2793acecee340aa9582e0f3efe9ff6cb4b5bdf5a.tar.gz
postgresql-2793acecee340aa9582e0f3efe9ff6cb4b5bdf5a.zip
injection_points: Add stats for point caching and loading
This adds two counters to the fixed-numbered stats of injection points to track the number of times injection points have been cached and loaded from the cache, as of the additions coming from a0a5869a8598 and 4b211003ecc2. These should have been part of f68cd847fa40, but I have lacked time and energy back then, and it did not prevent the code to be a useful template. While on it, this commit simplifies the description of a few tests while adding coverage for the new stats data. Author: Yogesh Sharma Discussion: https://postgr.es/m/3a6977f7-54ab-43ce-8806-11d5e15526a2@catprosystems.com
Diffstat (limited to 'src')
-rw-r--r--src/test/modules/injection_points/injection_points--1.0.sql4
-rw-r--r--src/test/modules/injection_points/injection_points.c8
-rw-r--r--src/test/modules/injection_points/injection_stats.h4
-rw-r--r--src/test/modules/injection_points/injection_stats_fixed.c24
-rw-r--r--src/test/modules/injection_points/t/001_stats.pl18
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();