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 km...@apache.org on 2009/03/03 23:10:41 UTC
svn commit: r749792 -
/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/ReclaimSpaceHelper.java
Author: kmarsden
Date: Tue Mar 3 22:10:41 2009
New Revision: 749792
URL: http://svn.apache.org/viewvc?rev=749792&view=rev
Log:
DERBY-4059 If space reclamation cannot obtain container lock it will not retry getting the lock
Modified:
db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/ReclaimSpaceHelper.java
Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/ReclaimSpaceHelper.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/ReclaimSpaceHelper.java?rev=749792&r1=749791&r2=749792&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/ReclaimSpaceHelper.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/ReclaimSpaceHelper.java Tue Mar 3 22:10:41 2009
@@ -42,6 +42,7 @@
import org.apache.derby.iapi.store.raw.xact.RawTransaction;
import org.apache.derby.iapi.store.raw.data.RawContainerHandle;
+import org.apache.derby.shared.common.reference.SQLState;
/**
@@ -259,6 +260,9 @@
}
if (work.incrAttempts() < 3) // retry this for serveral times
+ // it is however, unlikely that three tries will be
+ // enough because there is no delay between retries.
+ // See DERBY-4059 and DERBY-4055 for details.
{
return Serviceable.REQUEUE;
}
@@ -509,17 +513,34 @@
/**
- Open container shared no wait
+ * Open container shared no wait
+ *
+ * @param tran Transaction
+ * @param rlock LockingPolicy
+ * @param containerId container id.
+ *
+ * @return ContainerHandle or null if it could not obtain lock.
+ *
+ * @throws StandardException
*/
private static ContainerHandle openContainerNW(Transaction tran,
LockingPolicy rlock, ContainerKey containerId)
throws StandardException
{
- ContainerHandle containerHdl = tran.openContainer
- (containerId, rlock,
- ContainerHandle.MODE_FORUPDATE |
- ContainerHandle.MODE_LOCK_NOWAIT);
-
+ ContainerHandle containerHdl = null;
+ try {
+ containerHdl = tran.openContainer
+ (containerId, rlock,
+ ContainerHandle.MODE_FORUPDATE |
+ ContainerHandle.MODE_LOCK_NOWAIT);
+ } catch (StandardException se) {
+ // DERBY-4059
+ // if this is a lock timeout just return null.
+ // otherwise throw the exception
+ if (!se.getSQLState().equals(SQLState.LOCK_TIMEOUT)) {
+ throw se;
+ }
+ }
return containerHdl;
}