Re: [HACKERS] Moving relation extension locks out of heavyweight lock manager
Amit Kapila <amit.kapila16@gmail.com>
From: Amit Kapila <amit.kapila16@gmail.com>
To: Dilip Kumar <dilipbalaut@gmail.com>
Cc: Masahiko Sawada <masahiko.sawada@2ndquadrant.com>,
Andres Freund <andres@anarazel.de>, Tom Lane <tgl@sss.pgh.pa.us>, Robert Haas <robertmhaas@gmail.com>, Masahiko Sawada <sawada.mshk@gmail.com>,
Michael Paquier <michael@paquier.xyz>, Mithun Cy <mithun.cy@enterprisedb.com>,
Thomas Munro <thomas.munro@enterprisedb.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2020-03-12T11:57:59Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Allow page lock to conflict among parallel group members.
- 3ba59ccc896e 13.0 landed
-
Allow relation extension lock to conflict among parallel group members.
- 85f6b49c2c53 13.0 landed
-
Add assert to ensure that page locks don't participate in deadlock cycle.
- 72e78d831ab5 13.0 landed
-
Assert that we don't acquire a heavyweight lock on another object after
- 15ef6ff4b985 13.0 landed
-
Fix unsafe usage of strerror(errno) within ereport().
- 81256cd05f07 11.0 cited
Attachments
- 0001-Test-group-dead-locks.patch (application/octet-stream) patch 0001
- 0002-Allow-relation-extension-and-page-locks-to-conflict-.patch (application/octet-stream) patch 0002
On Thu, Mar 12, 2020 at 11:15 AM Dilip Kumar <dilipbalaut@gmail.com> wrote: > > I have fixed this in the attached patch set. > I have modified your v4-0003-Conflict-Extension-Page-lock-in-group-member patch. The modifications are (a) Change src/backend/storage/lmgr/README to reflect new behaviour, (b) Introduce a new macro LOCK_LOCKTAG which slightly simplifies the code, (c) moved the deadlock.c check a few lines up and (d) changed a few comments. It might be better if we can move the checks related to extension and page lock in a separate API or macro. What do you think? I have also used an extension to test this patch. This is the same extension that I have used to test the group locking patch. It will allow backends to form a group as we do for parallel workers. The extension is attached to this email. Test without patch: Session-1 Create table t1(c1 int, c2 char(500)); Select become_lock_group_leader(); Insert into t1 values(generate_series(1,100),'aaa'); -- stop this after acquiring relation extension lock via GDB. Session-2 Select become_lock_group_member(); Insert into t1 values(generate_series(101,200),'aaa'); - Debug LockAcquire and found that it doesn't generate conflict for Relation Extension lock. The above experiment has shown that without patch group members can acquire relation extension lock if the group leader has that lock. After patch the second session waits for the first session to release the relation extension lock. I know this is not a perfect way to test, but it is better than nothing. I think we need to do some more testing either using this extension or some other way for extension and page locks. -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com