diff options
author | Andres Freund | 2022-10-06 23:45:20 +0000 |
---|---|---|
committer | Andres Freund | 2022-10-07 00:17:16 +0000 |
commit | e0b0142959066f3a9de1c6867f4ec8d41d104f33 (patch) | |
tree | 24ce07203d35a3f37aaa8ba679e6c830fa138ed9 | |
parent | cd4e8caaa0eb5c3d3b12a45b29035e7a4bdfa4a8 (diff) |
Create subscription stats entry at CREATE SUBSCRIPTION time
Previously, the subscription stats entry was created when the first
stats, i.e., an error on apply worker or tablesync worker, were
reported. Therefore, the stats_reset field was not updated by
pg_stat_reset_subscription_stats() if the stats entry was not
populated yet, which was different behavior than other statistics.
This change creates the subscription stats entry and initializes it at
CREATE SUBSCRIPTION time.
Reviewed-by: Andres Freund <[email protected]>
Reviewed-by: Amit Kapila <[email protected]>
Author: Masahiko Sawada <[email protected]>
Discussion: https://postgr.es/m/CAAKRu_Zqd-e5imT_3-ZiQv1cfsWuy16OJTiUaCvqpq4V7GVdSg@mail.gmail.com
-rw-r--r-- | src/backend/utils/activity/pgstat_subscription.c | 8 | ||||
-rw-r--r-- | src/test/regress/expected/subscription.out | 34 | ||||
-rw-r--r-- | src/test/regress/sql/subscription.sql | 11 |
3 files changed, 51 insertions, 2 deletions
diff --git a/src/backend/utils/activity/pgstat_subscription.c b/src/backend/utils/activity/pgstat_subscription.c index e1072bd5bae..23486e659ad 100644 --- a/src/backend/utils/activity/pgstat_subscription.c +++ b/src/backend/utils/activity/pgstat_subscription.c @@ -41,14 +41,18 @@ pgstat_report_subscription_error(Oid subid, bool is_apply_error) /* * Report creating the subscription. - * - * Ensures that stats are dropped if transaction rolls back. */ void pgstat_create_subscription(Oid subid) { + /* Ensures that stats are dropped if transaction rolls back */ pgstat_create_transactional(PGSTAT_KIND_SUBSCRIPTION, InvalidOid, subid); + + /* Create and initialize the subscription stats entry */ + pgstat_get_entry_ref(PGSTAT_KIND_SUBSCRIPTION, InvalidOid, subid, + true, NULL); + pgstat_reset_entry(PGSTAT_KIND_SUBSCRIPTION, InvalidOid, subid, 0); } /* diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out index ef0ebf96b90..876b5049084 100644 --- a/src/test/regress/expected/subscription.out +++ b/src/test/regress/expected/subscription.out @@ -37,6 +37,40 @@ SELECT obj_description(s.oid, 'pg_subscription') FROM pg_subscription s; test subscription (1 row) +-- Check if the subscription stats are created and stats_reset is updated +-- by pg_stat_reset_subscription_stats(). +SELECT subname, stats_reset IS NULL stats_reset_is_null FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; + subname | stats_reset_is_null +-----------------+--------------------- + regress_testsub | t +(1 row) + +SELECT pg_stat_reset_subscription_stats(oid) FROM pg_subscription WHERE subname = 'regress_testsub'; + pg_stat_reset_subscription_stats +---------------------------------- + +(1 row) + +SELECT subname, stats_reset IS NULL stats_reset_is_null FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; + subname | stats_reset_is_null +-----------------+--------------------- + regress_testsub | f +(1 row) + +-- Reset the stats again and check if the new reset_stats is updated. +SELECT stats_reset as prev_stats_reset FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub' \gset +SELECT pg_stat_reset_subscription_stats(oid) FROM pg_subscription WHERE subname = 'regress_testsub'; + pg_stat_reset_subscription_stats +---------------------------------- + +(1 row) + +SELECT :'prev_stats_reset' < stats_reset FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; + ?column? +---------- + t +(1 row) + -- fail - name already exists CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false); ERROR: subscription "regress_testsub" already exists diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql index 4425fafc46c..eaeade8cced 100644 --- a/src/test/regress/sql/subscription.sql +++ b/src/test/regress/sql/subscription.sql @@ -30,6 +30,17 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB COMMENT ON SUBSCRIPTION regress_testsub IS 'test subscription'; SELECT obj_description(s.oid, 'pg_subscription') FROM pg_subscription s; +-- Check if the subscription stats are created and stats_reset is updated +-- by pg_stat_reset_subscription_stats(). +SELECT subname, stats_reset IS NULL stats_reset_is_null FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; +SELECT pg_stat_reset_subscription_stats(oid) FROM pg_subscription WHERE subname = 'regress_testsub'; +SELECT subname, stats_reset IS NULL stats_reset_is_null FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; + +-- Reset the stats again and check if the new reset_stats is updated. +SELECT stats_reset as prev_stats_reset FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub' \gset +SELECT pg_stat_reset_subscription_stats(oid) FROM pg_subscription WHERE subname = 'regress_testsub'; +SELECT :'prev_stats_reset' < stats_reset FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; + -- fail - name already exists CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false); |