You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Knut Anders Hatlen (JIRA)" <ji...@apache.org> on 2006/11/23 19:21:03 UTC
[jira] Updated: (DERBY-2107) Move page latching out of the lock
manager
[ http://issues.apache.org/jira/browse/DERBY-2107?page=all ]
Knut Anders Hatlen updated DERBY-2107:
--------------------------------------
Attachment: derby-2107-1a.diff
derby-2107-1a.stat
Here's a first patch (derby-2107-1a.diff) which implements latching
locally in the page objects. Description of the changes:
- BasePage.java:
- removed all traces of Latch and Lockable
- setExclusive() and setExclusiveNoWait() now set the variables that
the page is locked (owner and preLatch) directly, instead of going
through the lock manager. wait() and notifyAll() are used to
coordinate with releaseExclusive().
The rest of the patch affects code that is only called from the unit
tests for store. I think this is too much complexity for code that is
never used outside the tests, but I'm just trying to preserve the old
behaviour for now.
- LockingPolicy.java:
- the lockRecordForRead() and lockRecordForWrite() methods that
took a Latch object was changed to take a Transaction object, a
Page object and a ContainerHandle object. This was needed in
order to be able to unlatch the latched page in case a row lock
couldn't be obtained immediately.
- NoLocking.java, RowLocking1.java:
- change the signatures as in LockingPolicy. No implementation
changes needed.
- RowLocking2.java, RowLocking3.java:
- change the signatures as in LockingPolicy.
- instead of calling the LockFactory.lockObject() method which
took a Latch parameter, the logic needed to be inlined. First
try to get a row lock without waiting. If it couldn't be
obtained immediately, unlatch the page, wait for the lock, and
re-latch the page when the lock has been obtained.
- Page.java (interface) and BasePage.java (implementation):
- added new method Page.latch(ContainerHandle) (which only
forwards the call to the protected setExclusive() method) which
was needed for the RowLocking* classes to be able to re-latch the
page. (Page already has an unlatch() method.)
I have run derbyall and the JUnit tests successfully. I sometimes see
an error in lang/compressTable.sql, but the same diff has been seen in
the nightlies too
(http://dbtg.thresher.com/derby/test/trunk15/jvm1.5/testing/testlog/Linux-2.6.9-34.ELsmp_x86_64-x86_64/476241-derbylang_diff.txt).
However, I do see it more frequently with the patch, probably because
of changes in the timing.
This patch does not address deadlock detection issues, or timeout when
the latch cannot be obtained. I think those issues would be better to
address in follow-up patches (incremental development, right?).
Reviews and comments would be greatly appreciated! Thanks.
> Move page latching out of the lock manager
> ------------------------------------------
>
> Key: DERBY-2107
> URL: http://issues.apache.org/jira/browse/DERBY-2107
> Project: Derby
> Issue Type: Improvement
> Components: Store, Services
> Affects Versions: 10.3.0.0
> Reporter: Knut Anders Hatlen
> Assigned To: Knut Anders Hatlen
> Priority: Minor
> Attachments: derby-2107-1a.diff, derby-2107-1a.stat
>
>
> Latching of pages could be done more efficiently locally in store than in the lock manager. See the discussion here: http://thread.gmane.org/gmane.comp.apache.db.derby.devel/33135
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira