Re: ResourceOwner refactoring
Heikki Linnakangas <hlinnaka@iki.fi>
From: Heikki Linnakangas <hlinnaka@iki.fi>
To: Alexander Lakhin <exclusion@gmail.com>,
Peter Eisentraut <peter@eisentraut.org>, Andres Freund <andres@anarazel.de>
Cc: Aleksander Alekseev <aleksander@timescale.com>,
"pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>,
Julien Rouhaud <rjuju123@gmail.com>, Robert Haas <robertmhaas@gmail.com>
Date: 2023-11-08T23:48:59Z
Lists: pgsql-hackers
On 08/11/2023 20:00, Alexander Lakhin wrote: > Please look at a new assertion failure, I've managed to trigger with this script: > CREATE TABLE t( > i01 int, i02 int, i03 int, i04 int, i05 int, i06 int, i07 int, i08 int, i09 int, i10 int, > i11 int, i12 int, i13 int, i14 int, i15 int, i16 int, i17 int, i18 int, i19 int, i20 int, > i21 int, i22 int, i23 int, i24 int, i25 int, i26 int > ); > CREATE TABLE tp PARTITION OF t FOR VALUES IN (1); > > (gdb) bt > ... > #5 0x0000560dd4e42f77 in ExceptionalCondition (conditionName=0x560dd5059fbc "owner->narr == 0", fileName=0x560dd5059e31 > "resowner.c", lineNumber=362) at assert.c:66 > #6 0x0000560dd4e93cbd in ResourceOwnerReleaseAll (owner=0x560dd69cebd0, phase=RESOURCE_RELEASE_BEFORE_LOCKS, > printLeakWarnings=false) at resowner.c:362 > #7 0x0000560dd4e92e22 in ResourceOwnerReleaseInternal (owner=0x560dd69cebd0, phase=RESOURCE_RELEASE_BEFORE_LOCKS, > isCommit=false, isTopLevel=true) at resowner.c:725 > #8 0x0000560dd4e92d42 in ResourceOwnerReleaseInternal (owner=0x560dd69ce3f8, phase=RESOURCE_RELEASE_BEFORE_LOCKS, > isCommit=false, isTopLevel=true) at resowner.c:678 > #9 0x0000560dd4e92cdb in ResourceOwnerRelease (owner=0x560dd69ce3f8, phase=RESOURCE_RELEASE_BEFORE_LOCKS, > isCommit=false, isTopLevel=true) at resowner.c:652 > #10 0x0000560dd47316ef in AbortTransaction () at xact.c:2848 > #11 0x0000560dd47329ac in AbortCurrentTransaction () at xact.c:3339 > #12 0x0000560dd4c37284 in PostgresMain (dbname=0x560dd69779f0 "regression", username=0x560dd69779d8 "law") at > postgres.c:4370 > ... Thanks for the testing! Fixed. I introduced that bug in one of the last revisions of the patch: I changed ResourceOwnerSort() to not bother moving all the elements from the array to the hash table if the hash table is allocated but empty. However, ResourceOwnerReleas() didn't get the memo, and still checked "owner->hash != NULL" rather than "owner->nhash == 0". -- Heikki Linnakangas Neon (https://neon.tech)
Commits
-
Make RelationFlushRelation() work without ResourceOwner during abort
- e6cd85772647 17.0 landed
-
Fix bug in bulk extending temp relation after failure
- d212957254de 17.0 landed
-
Add missing PGDLLIMPORT markings
- c6b86eaa55ff 17.0 landed
-
Add test_dsa module.
- 325f54033e59 17.0 landed
-
Clear CurrentResourceOwner earlier in CommitTransaction.
- c21e6e2fd48c 17.0 landed
-
Fix dsa.c with different resource owners.
- a8b330ffb6f7 17.0 landed
-
Fix bug in the new ResourceOwner implementation.
- 8f4a1ab471e6 17.0 landed
-
Change pgcrypto to use the new ResourceOwner mechanism.
- cd694f60dc97 17.0 landed
-
Use a faster hash function in resource owners.
- 954e43564d99 17.0 landed
-
Make ResourceOwners more easily extensible.
- b8bff07daa85 17.0 landed
-
Move a few ResourceOwnerEnlarge() calls for safety and clarity.
- b70c2143bbbe 17.0 landed