rework-using-enums.diff
application/octet-stream
Filename: rework-using-enums.diff
Type: application/octet-stream
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/utils/activity/pgstat.c | 22 | 27 |
| src/backend/utils/activity/pgstat_shmem.c | 1 | 1 |
| src/include/pgstat.h | 9 | 0 |
| src/include/utils/pgstat_internal.h | 1 | 11 |
diff --git a/src/backend/utils/activity/pgstat.c b/src/backend/utils/activity/pgstat.c
index dbd55a065d..7fbdbb09bd 100644
--- a/src/backend/utils/activity/pgstat.c
+++ b/src/backend/utils/activity/pgstat.c
@@ -193,9 +193,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
[PGSTAT_KIND_DATABASE] = {
.name = "database",
- .fixed_amount = false,
- /* so pg_stat_database entries can be seen in all databases */
- .accessed_across_databases = true,
+ .kind_group = PGSTAT_CLUSTER,
.shared_size = sizeof(PgStatShared_Database),
.shared_data_off = offsetof(PgStatShared_Database, stats),
@@ -209,7 +207,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
[PGSTAT_KIND_RELATION] = {
.name = "relation",
- .fixed_amount = false,
+ .kind_group = PGSTAT_OBJECT,
.shared_size = sizeof(PgStatShared_Relation),
.shared_data_off = offsetof(PgStatShared_Relation, stats),
@@ -223,7 +221,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
[PGSTAT_KIND_FUNCTION] = {
.name = "function",
- .fixed_amount = false,
+ .kind_group = PGSTAT_OBJECT,
.shared_size = sizeof(PgStatShared_Function),
.shared_data_off = offsetof(PgStatShared_Function, stats),
@@ -236,9 +234,8 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
[PGSTAT_KIND_REPLSLOT] = {
.name = "replslot",
- .fixed_amount = false,
+ .kind_group = PGSTAT_CLUSTER,
- .accessed_across_databases = true,
.named_on_disk = true,
.shared_size = sizeof(PgStatShared_ReplSlot),
@@ -254,9 +251,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
[PGSTAT_KIND_SUBSCRIPTION] = {
.name = "subscription",
- .fixed_amount = false,
- /* so pg_stat_subscription_stats entries can be seen in all databases */
- .accessed_across_databases = true,
+ .kind_group = PGSTAT_CLUSTER,
.shared_size = sizeof(PgStatShared_Subscription),
.shared_data_off = offsetof(PgStatShared_Subscription, stats),
@@ -273,7 +268,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
[PGSTAT_KIND_ARCHIVER] = {
.name = "archiver",
- .fixed_amount = true,
+ .kind_group = PGSTAT_GLOBAL,
.reset_all_cb = pgstat_archiver_reset_all_cb,
.snapshot_cb = pgstat_archiver_snapshot_cb,
@@ -282,7 +277,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
[PGSTAT_KIND_BGWRITER] = {
.name = "bgwriter",
- .fixed_amount = true,
+ .kind_group = PGSTAT_GLOBAL,
.reset_all_cb = pgstat_bgwriter_reset_all_cb,
.snapshot_cb = pgstat_bgwriter_snapshot_cb,
@@ -291,7 +286,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
[PGSTAT_KIND_CHECKPOINTER] = {
.name = "checkpointer",
- .fixed_amount = true,
+ .kind_group = PGSTAT_GLOBAL,
.reset_all_cb = pgstat_checkpointer_reset_all_cb,
.snapshot_cb = pgstat_checkpointer_snapshot_cb,
@@ -300,7 +295,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
[PGSTAT_KIND_SLRU] = {
.name = "slru",
- .fixed_amount = true,
+ .kind_group = PGSTAT_GLOBAL,
.reset_all_cb = pgstat_slru_reset_all_cb,
.snapshot_cb = pgstat_slru_snapshot_cb,
@@ -309,7 +304,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
[PGSTAT_KIND_WAL] = {
.name = "wal",
- .fixed_amount = true,
+ .kind_group = PGSTAT_GLOBAL,
.reset_all_cb = pgstat_wal_reset_all_cb,
.snapshot_cb = pgstat_wal_snapshot_cb,
@@ -652,7 +647,7 @@ pgstat_reset_single_counter(PgStat_Kind kind, Oid objoid)
{
TimestampTz ts = GetCurrentTimestamp();
- Assert(!pgstat_kind_info_for(kind)->fixed_amount);
+ Assert(pgstat_kind_info_for(kind)->kind_group == PGSTAT_OBJECT);
/* Set the reset timestamp for the whole database */
pgstat_reset_database_timestamp(MyDatabaseId, ts);
@@ -673,7 +668,7 @@ pgstat_reset_shared_counters(PgStat_Kind kind)
const PgStat_KindInfo *kind_info = pgstat_kind_info_for(kind);
TimestampTz now = GetCurrentTimestamp();
- Assert(kind_info->fixed_amount);
+ Assert(kind_info->kind_group == PGSTAT_GLOBAL);
kind_info->reset_all_cb(now);
}
@@ -728,7 +723,7 @@ pgstat_fetch_entry(PgStat_Kind kind, Oid dboid, Oid objoid)
/* should be called from backends */
Assert(IsUnderPostmaster || !IsPostmasterEnvironment);
- AssertArg(!kind_info->fixed_amount);
+ AssertArg(kind_info->kind_group == PGSTAT_DYNAMIC);
pgstat_prep_snapshot();
@@ -825,7 +820,7 @@ pgstat_get_stat_snapshot_timestamp(bool *have_snapshot)
bool
pgstat_exists_entry(PgStat_Kind kind, Oid dboid, Oid objoid)
{
- if (pgstat_kind_info_for(kind)->fixed_amount)
+ if (pgstat_kind_info_for(kind)->kind_group == PGSTAT_GLOBAL)
return true;
return pgstat_get_entry_ref(kind, dboid, objoid, false, NULL) != NULL;
@@ -841,7 +836,7 @@ void
pgstat_snapshot_global(PgStat_Kind kind)
{
AssertArg(pgstat_kind_valid(kind));
- AssertArg(pgstat_kind_info_for(kind)->fixed_amount);
+ AssertArg(pgstat_kind_info_for(kind)->kind_group == PGSTAT_GLOBAL);
if (pgstat_fetch_consistency == PGSTAT_FETCH_CONSISTENCY_SNAPSHOT)
pgstat_build_snapshot();
@@ -909,7 +904,7 @@ pgstat_build_snapshot(void)
*/
if (p->key.dboid != MyDatabaseId &&
p->key.dboid != InvalidOid &&
- !kind_info->accessed_across_databases)
+ kind_info->kind_group == PGSTAT_OBJECT)
continue;
if (p->dropped)
@@ -938,7 +933,7 @@ pgstat_build_snapshot(void)
{
const PgStat_KindInfo *kind_info = pgstat_kind_info_for(kind);
- if (!kind_info->fixed_amount)
+ if (kind_info->kind_group == PGSTAT_DYNAMIC)
{
Assert(kind_info->snapshot_cb == NULL);
continue;
@@ -955,7 +950,7 @@ pgstat_build_snapshot_global(PgStat_Kind kind)
{
const PgStat_KindInfo *kind_info = pgstat_kind_info_for(kind);
- Assert(kind_info->fixed_amount);
+ Assert(kind_info->kind_group == PGSTAT_GLOBAL);
Assert(kind_info->snapshot_cb != NULL);
if (pgstat_fetch_consistency == PGSTAT_FETCH_CONSISTENCY_NONE)
@@ -1047,8 +1042,8 @@ pgstat_delete_pending_entry(PgStat_EntryRef *entry_ref)
void *pending_data = entry_ref->pending;
Assert(pending_data != NULL);
- /* !fixed_amount stats should be handled explicitly */
- Assert(!pgstat_kind_info_for(kind)->fixed_amount);
+ /* global stats should be handled explicitly : why?*/
+ Assert(pgstat_kind_info_for(kind)->kind_group == PGSTAT_DYNAMIC);
if (kind_info->delete_pending_cb)
kind_info->delete_pending_cb(entry_ref);
@@ -1091,7 +1086,7 @@ pgstat_flush_pending_entries(bool nowait)
bool did_flush;
dlist_node *next;
- Assert(!kind_info->fixed_amount);
+ Assert(kind_info->kind_group == PGSTAT_DYNAMIC);
Assert(kind_info->flush_pending_cb != NULL);
/* flush the stats, if possible */
@@ -1585,7 +1580,7 @@ pgstat_reset_all_stats(TimestampTz ts)
{
const PgStat_KindInfo *kind_info = pgstat_kind_info_for(kind);
- if (!kind_info->fixed_amount)
+ if (kind_info->kind_group == PGSTAT_DYNAMIC)
continue;
kind_info->reset_all_cb(ts);
diff --git a/src/backend/utils/activity/pgstat_shmem.c b/src/backend/utils/activity/pgstat_shmem.c
index d11b628710..82003df524 100644
--- a/src/backend/utils/activity/pgstat_shmem.c
+++ b/src/backend/utils/activity/pgstat_shmem.c
@@ -926,7 +926,7 @@ pgstat_reset_entry(PgStat_Kind kind, Oid dboid, Oid objoid)
{
PgStat_EntryRef *entry_ref;
- Assert(!pgstat_kind_info_for(kind)->fixed_amount);
+ Assert(pgstat_kind_info_for(kind)->kind_group == PGSTAT_DYNAMIC);
entry_ref = pgstat_get_entry_ref(kind, dboid, objoid, false, NULL);
if (!entry_ref || entry_ref->shared_entry->dropped)
diff --git a/src/include/pgstat.h b/src/include/pgstat.h
index 8234f9fdfb..d62ad01ddb 100644
--- a/src/include/pgstat.h
+++ b/src/include/pgstat.h
@@ -31,6 +31,15 @@
/* Default directory to store temporary statistics data in */
#define PG_STAT_TMP_DIR "pg_stat_tmp"
+typedef enum PgStat_KindGroup
+{
+ PGSTAT_GLOBAL = 1,
+ PGSTAT_CLUSTER,
+ PGSTAT_OBJECT
+} PgStat_KindGroup;
+
+#define PGSTAT_DYNAMIC (PGSTAT_CLUSTER | PGSTAT_OBJECT)
+
/* The types of statistics entries */
typedef enum PgStat_Kind
{
diff --git a/src/include/utils/pgstat_internal.h b/src/include/utils/pgstat_internal.h
index 7efa9d32a9..3fde2034b1 100644
--- a/src/include/utils/pgstat_internal.h
+++ b/src/include/utils/pgstat_internal.h
@@ -181,17 +181,7 @@ typedef struct PgStat_SubXactStatus
*/
typedef struct PgStat_KindInfo
{
- /*
- * Does a fixed number of stats object exist for this kind of stats or not
- * (e.g. tables).
- */
- bool fixed_amount:1;
-
- /*
- * Can stats of this kind be accessed from another database? Determines
- * whether a stats object gets included in stats snapshots.
- */
- bool accessed_across_databases:1;
+ PgStat_KindGroup kind_group;
/*
* For variable number stats: Identified on-disk using a name, rather than