]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Add more debugging information when dropping twice pgstats entry
authorMichael Paquier <michael@paquier.xyz>
Fri, 7 Jun 2024 09:46:34 +0000 (18:46 +0900)
committerMichael Paquier <michael@paquier.xyz>
Fri, 7 Jun 2024 09:46:34 +0000 (18:46 +0900)
Floris Van Nee has reported a bug in the pgstats facility where a stats
entry already dropped would get again dropped.  This case should not
happen, still the error generated did not offer any details about the
stats entry getting dropped.

This commit improves the error message generated to inform about the
stats entry kind, database OID, object OID and refcount, which should
help to debug more the problem reported.  Bertrand Drouvot has been
independently able to reach this error path while writing a new feature,
and more details about the failure would have been helpful for
debugging.

Author: Andres Freund, Bertrand Drouvot
Discussion: https://postgr.es/m/20240505160915.6boysum4f34siqct@awork3.anarazel.de
Discussion: https://postgr.es/m/ZkM30paAD8Cr/Bix@ip-10-97-1-34.eu-west-3.compute.internal
Backpatch-through: 15

src/backend/utils/activity/pgstat_shmem.c

index 9e4ea2e04286c10579a417f1258ba81f6a2e8426..cee0bd602342bb74fef7b9397bd4576c6309706a 100644 (file)
@@ -780,7 +780,11 @@ pgstat_drop_entry_internal(PgStatShared_HashEntry *shent,
         * backends to release their references.
         */
        if (shent->dropped)
-               elog(ERROR, "can only drop stats once");
+               elog(ERROR,
+                        "trying to drop stats entry already dropped: kind=%s dboid=%u objoid=%u refcount=%u",
+                        pgstat_get_kind_info(shent->key.kind)->name,
+                        shent->key.dboid, shent->key.objoid,
+                        pg_atomic_read_u32(&shent->refcount));
        shent->dropped = true;
 
        /* release refcount marking entry as not dropped */