0001-Update-recovery-conflict-stats-immediately.patch
text/x-patch
Filename: 0001-Update-recovery-conflict-stats-immediately.patch
Type: text/x-patch
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch 0001
Subject: Update recovery conflict stats immediately.
| File | + | − |
|---|---|---|
| src/backend/utils/activity/pgstat_database.c | 13 | 1 |
From cbab5797fde1db70464f157b4bb9321ab40ad025 Mon Sep 17 00:00:00 2001
From: Thomas Munro <tmunro@postgresql.org>
Date: Thu, 7 Sep 2023 15:28:47 +1200
Subject: [PATCH] Update recovery conflict stats immediately.
031_recovery_conflict.pl would occasionally fail to see a stats change,
leading to intermittent failures. Since recovery conflicts are rare,
just flush them immediately.
No back-patch for now, but that will be needed if/when the test is
re-enabled in back-branches.
Author: Andres Freund <andres@anarazel.de>
Reported-by: Christoph Berg <myon@debian.org>
Discussion: https://postgr.es/m/20230807230821.gylo74fox445hu24%40awork3.anarazel.de
diff --git a/src/backend/utils/activity/pgstat_database.c b/src/backend/utils/activity/pgstat_database.c
index d04426f53f..cc2a5724e7 100644
--- a/src/backend/utils/activity/pgstat_database.c
+++ b/src/backend/utils/activity/pgstat_database.c
@@ -81,12 +81,22 @@ void
pgstat_report_recovery_conflict(int reason)
{
PgStat_StatDBEntry *dbentry;
+ PgStat_EntryRef *entry_ref;
+ PgStatShared_Database *sharedent;
Assert(IsUnderPostmaster);
if (!pgstat_track_counts)
return;
- dbentry = pgstat_prep_database_pending(MyDatabaseId);
+ /*
+ * Update the shared stats directly - recovery conflicts should never be
+ * common enough for that to be a problem.
+ */
+ entry_ref =
+ pgstat_get_entry_ref_locked(PGSTAT_KIND_DATABASE, MyDatabaseId, InvalidOid, false);
+
+ sharedent = (PgStatShared_Database *) entry_ref->shared_stats;
+ dbentry = &sharedent->stats;
switch (reason)
{
@@ -116,6 +126,8 @@ pgstat_report_recovery_conflict(int reason)
dbentry->conflict_startup_deadlock++;
break;
}
+
+ pgstat_unlock_entry(entry_ref);
}
/*
--
2.41.0