You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2007/07/19 09:19:14 UTC
svn commit: r557507 - in
/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree:
BTreeLockingPolicy.java BTreeMaxScan.java BTreeRowPosition.java
BTreeScan.java OpenBTree.java index/B2INoLocking.java
index/B2IRowLocking3.java
Author: kahatlen
Date: Thu Jul 19 00:19:13 2007
New Revision: 557507
URL: http://svn.apache.org/viewvc?view=rev&rev=557507
Log:
DERBY-2878: Scan protection handle could be cached in BasePage
Don't allocate a new RecordHandle and PageKey in unlockScan().
1) Replaced the field current_scan_pageno (a long) in
BTreeRowPosition with current_scan_protectionHandle (a
RecordHandle which is cached in BasePage)
2) Changed the signature of BTreeLockingPolicy.unlockScan() to take
a RecordHandle
3) Removed unused method OpenBTree.makeRecordHandle()
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeLockingPolicy.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeMaxScan.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeRowPosition.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeScan.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/OpenBTree.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/index/B2INoLocking.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/index/B2IRowLocking3.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeLockingPolicy.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeLockingPolicy.java?view=diff&rev=557507&r1=557506&r2=557507
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeLockingPolicy.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeLockingPolicy.java Thu Jul 19 00:19:13 2007
@@ -24,6 +24,7 @@
import org.apache.derby.iapi.error.StandardException;
import org.apache.derby.iapi.store.raw.FetchDescriptor;
+import org.apache.derby.iapi.store.raw.RecordHandle;
import org.apache.derby.iapi.types.DataValueDescriptor;
import org.apache.derby.iapi.types.RowLocation;
@@ -253,10 +254,12 @@
* end of transaction.
* <p>
*
- * @param page_number page number of page that lockScan was called on.
+ * @param protectionHandle a <code>RecordHandle</code> that, when locked,
+ * protects all the record ids on a page
+ * @see RecordHandle#RECORD_ID_PROTECTION_HANDLE
*
**/
- abstract public void unlockScan(long page_number);
+ abstract public void unlockScan(RecordHandle protectionHandle);
/**************************************************************************
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeMaxScan.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeMaxScan.java?view=diff&rev=557507&r1=557506&r2=557507
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeMaxScan.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeMaxScan.java Thu Jul 19 00:19:13 2007
@@ -285,7 +285,7 @@
SanityManager.ASSERT(this.scan_state == SCAN_INIT);
SanityManager.ASSERT(pos.current_rh == null);
SanityManager.ASSERT(pos.current_positionKey == null);
- SanityManager.ASSERT(pos.current_scan_pageno == 0);
+ SanityManager.ASSERT(pos.current_scan_protectionHandle == null);
}
// Loop until you can lock the row previous to the first row to be
@@ -363,7 +363,8 @@
}
this.scan_state = SCAN_INPROGRESS;
- pos.current_scan_pageno = pos.current_leaf.page.getPageNumber();
+ pos.current_scan_protectionHandle =
+ pos.current_leaf.page.getProtectionRecordHandle();
if (SanityManager.DEBUG)
SanityManager.ASSERT(pos.current_leaf != null);
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeRowPosition.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeRowPosition.java?view=diff&rev=557507&r1=557506&r2=557507
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeRowPosition.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeRowPosition.java Thu Jul 19 00:19:13 2007
@@ -25,6 +25,7 @@
import org.apache.derby.iapi.services.sanity.SanityManager;
import org.apache.derby.iapi.store.raw.Page;
+import org.apache.derby.iapi.store.raw.RecordHandle;
import org.apache.derby.iapi.store.access.RowUtil;
@@ -45,7 +46,7 @@
**************************************************************************
*/
public DataValueDescriptor[] current_positionKey;
- public long current_scan_pageno;
+ public RecordHandle current_scan_protectionHandle;
public LeafControlRow current_leaf;
protected LeafControlRow next_leaf;
public DataValueDescriptor[] current_lock_template;
@@ -97,7 +98,8 @@
super.toString() +
"current_positionKey = " + current_positionKey +
";key = " + RowUtil.toString(current_positionKey) +
- ";current_scan_pageno" + current_scan_pageno +
+ ";current_scan_protectionHandle" +
+ current_scan_protectionHandle +
";next_leaf" + next_leaf +
";current_leaf" + current_leaf;
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeScan.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeScan.java?view=diff&rev=557507&r1=557506&r2=557507
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeScan.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/BTreeScan.java Thu Jul 19 00:19:13 2007
@@ -348,7 +348,7 @@
(scan_state == SCAN_INIT) || (scan_state == SCAN_HOLD_INIT));
SanityManager.ASSERT(pos.current_rh == null);
SanityManager.ASSERT(pos.current_positionKey == null);
- SanityManager.ASSERT(pos.current_scan_pageno == 0);
+ SanityManager.ASSERT(pos.current_scan_protectionHandle == null);
}
// Loop until you can lock the row previous to the first row to be
@@ -481,7 +481,8 @@
}
this.scan_state = SCAN_INPROGRESS;
- pos.current_scan_pageno = pos.current_leaf.page.getPageNumber();
+ pos.current_scan_protectionHandle =
+ pos.current_leaf.page.getProtectionRecordHandle();
pos.current_slot = pos.current_slot;
if (SanityManager.DEBUG)
@@ -514,7 +515,7 @@
SanityManager.ASSERT(pos.current_rh == null);
SanityManager.ASSERT(pos.current_positionKey == null);
- SanityManager.ASSERT(pos.current_scan_pageno == 0);
+ SanityManager.ASSERT(pos.current_scan_protectionHandle == null);
}
// Loop until you can lock the row previous to the first row to be
@@ -639,7 +640,8 @@
}
this.scan_state = SCAN_INPROGRESS;
- pos.current_scan_pageno = pos.current_leaf.page.getPageNumber();
+ pos.current_scan_protectionHandle =
+ pos.current_leaf.page.getProtectionRecordHandle();
if (SanityManager.DEBUG)
SanityManager.ASSERT(pos.current_leaf != null);
@@ -668,7 +670,7 @@
// assert may not be true, but for now we always have the scan
// lock when we call this routine.
if (SanityManager.DEBUG)
- SanityManager.ASSERT(pos.current_scan_pageno != 0);
+ SanityManager.ASSERT(pos.current_scan_protectionHandle != null);
while (true)
{
@@ -705,10 +707,13 @@
// there is no next leaf we can release scan and latch on current page.
if (SanityManager.DEBUG)
{
- if (pos.current_scan_pageno != pos.current_leaf.page.getPageNumber())
+ if (pos.current_scan_protectionHandle.getPageNumber() !=
+ pos.current_leaf.page.getPageNumber()) {
SanityManager.THROWASSERT(
- "pos.current_scan_pageno = " + pos.current_scan_pageno +
+ "pos.current_scan_protectionHandle = " +
+ pos.current_scan_protectionHandle +
"pos.current_leaf = " + pos.current_leaf);
+ }
}
// unlock the previous row if doing read.
@@ -722,8 +727,9 @@
pos.current_leaf.release();
pos.current_leaf = pos.next_leaf;
- pos.current_scan_pageno =
- (pos.next_leaf == null) ? 0 : pos.next_leaf.page.getPageNumber();
+ pos.current_scan_protectionHandle =
+ (pos.current_leaf == null) ?
+ null : pos.current_leaf.page.getProtectionRecordHandle();
// set up for scan to continue at beginning of next page.
pos.current_slot = Page.FIRST_SLOT_NUMBER;
@@ -1065,7 +1071,7 @@
{
// Reposition to remembered spot on page.
if (SanityManager.DEBUG)
- SanityManager.ASSERT(pos.current_scan_pageno != 0);
+ SanityManager.ASSERT(pos.current_scan_protectionHandle != null);
pos.current_leaf = (LeafControlRow)
ControlRow.get(this, pos.current_rh.getPageNumber());
@@ -1078,7 +1084,7 @@
// assert may not be true, but for now we always release the
// scan lock when we save the row away as the current position.
if (SanityManager.DEBUG)
- SanityManager.ASSERT(pos.current_scan_pageno == 0);
+ SanityManager.ASSERT(pos.current_scan_protectionHandle == null);
SearchParameters sp =
new SearchParameters(
@@ -1136,7 +1142,8 @@
} while (latch_released);
- pos.current_scan_pageno = pos.current_leaf.page.getPageNumber();
+ pos.current_scan_protectionHandle =
+ pos.current_leaf.page.getProtectionRecordHandle();
pos.current_slot = sp.resultSlot;
pos.current_positionKey = null;
}
@@ -1150,9 +1157,9 @@
* @param pos position of the scan
*/
private void unlockCurrentScan(BTreeRowPosition pos) {
- if (pos.current_scan_pageno != 0L) {
- getLockingPolicy().unlockScan(pos.current_scan_pageno);
- pos.current_scan_pageno = 0L;
+ if (pos.current_scan_protectionHandle != null) {
+ getLockingPolicy().unlockScan(pos.current_scan_protectionHandle);
+ pos.current_scan_protectionHandle = null;
}
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/OpenBTree.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/OpenBTree.java?view=diff&rev=557507&r1=557506&r2=557507
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/OpenBTree.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/OpenBTree.java Thu Jul 19 00:19:13 2007
@@ -577,16 +577,6 @@
}
}
- public RecordHandle makeRecordHandle(
- long page_number,
- int rec_id)
- throws StandardException
- {
- return(
- container.makeRecordHandle(
- page_number, rec_id));
- }
-
/**
* Dump information about tree into the log.
* <p>
@@ -656,7 +646,7 @@
if (release_scan_lock)
{
btree_locking_policy.unlockScan(
- leaf.page.getPageNumber());
+ leaf.page.getProtectionRecordHandle());
}
leaf.release();
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/index/B2INoLocking.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/index/B2INoLocking.java?view=diff&rev=557507&r1=557506&r2=557507
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/index/B2INoLocking.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/index/B2INoLocking.java Thu Jul 19 00:19:13 2007
@@ -28,6 +28,7 @@
import org.apache.derby.iapi.store.raw.FetchDescriptor;
import org.apache.derby.iapi.store.raw.LockingPolicy;
+import org.apache.derby.iapi.store.raw.RecordHandle;
import org.apache.derby.iapi.store.raw.Transaction;
import org.apache.derby.iapi.types.DataValueDescriptor;
@@ -215,8 +216,7 @@
* See BTree.unlockScan() for more info.
*
**/
- public void unlockScan(
- long page_number)
+ public void unlockScan(RecordHandle protectionHandle)
{
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/index/B2IRowLocking3.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/index/B2IRowLocking3.java?view=diff&rev=557507&r1=557506&r2=557507
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/index/B2IRowLocking3.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/btree/index/B2IRowLocking3.java Thu Jul 19 00:19:13 2007
@@ -861,17 +861,12 @@
* See BTree.unlockScan() for more info.
*
**/
- public void unlockScan(
- long page_number)
+ public void unlockScan(RecordHandle scan_lock_rh)
{
// This is first row in table, lock the special key that
// represents the key previous to the first key of the table.
try
{
- RecordHandle scan_lock_rh =
- open_btree.makeRecordHandle(
- page_number, RecordHandle.RECORD_ID_PROTECTION_HANDLE);
-
scan_locking_policy.unlockRecordAfterRead(
rawtran, open_btree.getContainerHandle(),
scan_lock_rh, false, true);