Author: manik.surtani(a)jboss.com
Date: 2009-08-06 05:32:14 -0400 (Thu, 06 Aug 2009)
New Revision: 8157
Modified:
core/trunk/src/main/java/org/jboss/cache/lock/PessimisticNodeBasedLockManager.java
Log:
JBCACHE-1527 Unnecessary write locks acquired during a data gravitation event and
pessimistic locking
Modified:
core/trunk/src/main/java/org/jboss/cache/lock/PessimisticNodeBasedLockManager.java
===================================================================
---
core/trunk/src/main/java/org/jboss/cache/lock/PessimisticNodeBasedLockManager.java 2009-08-05
22:06:43 UTC (rev 8156)
+++
core/trunk/src/main/java/org/jboss/cache/lock/PessimisticNodeBasedLockManager.java 2009-08-06
09:32:14 UTC (rev 8157)
@@ -121,6 +121,7 @@
Thread currentThread = Thread.currentThread();
GlobalTransaction gtx = ctx.getGlobalTransaction();
boolean created = false;
+ int createdLevel = -1;
// if the tx associated with the current thread is rolling back, barf! JBCACHE-923
if (gtx != null) TransactionTable.assertTransactionValid(ctx);
@@ -142,7 +143,11 @@
{
// if the new node is to be marked as deleted, do not notify!
currentNode = parent.addChildDirect(childName, !skipNotification);
- created = true;
+ if (!created)
+ {
+ created = true;
+ createdLevel = currentIndex;
+ }
if (trace) log.trace("Child node was null, so created child node
" + childName);
if (createdNodes != null) createdNodes.add(currentNode);
}
@@ -163,6 +168,7 @@
{
lockTypeRequired = WRITE;
}
+
Fqn currentNodeFqn = currentNode.getFqn();
// actually acquire the lock we need. This method blocks.
@@ -188,10 +194,17 @@
currentNode = rootNode;
currentIndex = -1;
parent = null;
+ created = false;
+ createdLevel = -1;
}
else
{
currentNode = parent;
+ if (createdLevel == currentIndex)
+ {
+ created = false;
+ createdLevel = -1;
+ }
currentIndex--;
parent = null;
if (System.currentTimeMillis() > expiryTime)
Show replies by date