[jboss-cvs] JBossCache/src/org/jboss/cache/loader/bdbje ...
Manik Surtani
manik at jboss.org
Tue Jun 19 10:54:02 EDT 2007
User: msurtani
Date: 07/06/19 10:54:02
Modified: src/org/jboss/cache/loader/bdbje BdbjeCacheLoader.java
Log:
thread safety
Revision Changes Path
1.27 +104 -65 JBossCache/src/org/jboss/cache/loader/bdbje/BdbjeCacheLoader.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: BdbjeCacheLoader.java
===================================================================
RCS file: /cvsroot/jboss/JBossCache/src/org/jboss/cache/loader/bdbje/BdbjeCacheLoader.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -b -r1.26 -r1.27
--- BdbjeCacheLoader.java 19 Jun 2007 13:05:18 -0000 1.26
+++ BdbjeCacheLoader.java 19 Jun 2007 14:54:02 -0000 1.27
@@ -24,6 +24,7 @@
import org.jboss.cache.Modification;
import org.jboss.cache.config.CacheLoaderConfig.IndividualCacheLoaderConfig;
import org.jboss.cache.loader.AbstractCacheLoader;
+import org.jboss.cache.lock.StripedLock;
import java.io.File;
import java.io.IOException;
@@ -50,7 +51,7 @@
*
* @author Mark Hayes May 16, 2004
* @author Bela Ban
- * @version $Id: BdbjeCacheLoader.java,v 1.26 2007/06/19 13:05:18 msurtani Exp $
+ * @version $Id: BdbjeCacheLoader.java,v 1.27 2007/06/19 14:54:02 msurtani Exp $
*/
@ThreadSafe
public class BdbjeCacheLoader extends AbstractCacheLoader
@@ -71,6 +72,7 @@
private SerialBinding serialBinding;
private Map<Object, Transaction> txnMap;
private boolean transactional;
+ private StripedLock lock = new StripedLock();
/*
* Service implementation -- lifecycle methods.
@@ -115,6 +117,7 @@
throws Exception
{
+
log.trace("Starting BdbjeCacheLoader instance.");
checkNotOpen();
@@ -164,7 +167,8 @@
* since it may be shared by transactional and non-transactional caches.
*/
transactional = cache.getTransactionManager() != null;
-
+ // get a WL on the DB
+ lock.acquireLock(Fqn.ROOT, true);
try
{
/* Open the environment, creating it if it doesn't exist. */
@@ -182,6 +186,10 @@
destroy();
throw e;
}
+ finally
+ {
+ lock.releaseLock(Fqn.ROOT);
+ }
}
/**
@@ -328,6 +336,7 @@
Set<String> set = null;
Cursor cursor = cacheDb.openCursor(null, null);
+ lock.acquireLock(name, false);
try
{
while (true)
@@ -352,6 +361,7 @@
}
finally
{
+ lock.releaseLock(name);
cursor.close();
}
if (set != null)
@@ -379,6 +389,9 @@
DatabaseEntry keyEntry = makeKeyEntry(name);
DatabaseEntry foundData = new DatabaseEntry();
+ lock.acquireLock(name, false);
+ try
+ {
OperationStatus status = cacheDb.get(null, keyEntry, foundData, null);
if (status == OperationStatus.SUCCESS)
{
@@ -391,6 +404,11 @@
return null;
}
}
+ finally
+ {
+ lock.releaseLock(name);
+ }
+ }
// See http://jira.jboss.com/jira/browse/JBCACHE-118 for why this is commented out.
@@ -424,9 +442,17 @@
DatabaseEntry keyEntry = makeKeyEntry(name);
DatabaseEntry foundData = new DatabaseEntry();
foundData.setPartial(0, 0, true);
+ lock.acquireLock(name, false);
+ try
+ {
OperationStatus status = cacheDb.get(null, keyEntry, foundData, null);
return (status == OperationStatus.SUCCESS);
}
+ finally
+ {
+ lock.releaseLock(name);
+ }
+ }
/**
@@ -450,6 +476,7 @@
}
else
{
+
oldVal = doPut(null, name, key, value);
}
return oldVal;
@@ -471,6 +498,7 @@
DatabaseEntry dataEntry = makeDataEntry(map);
DatabaseEntry keyEntry = makeKeyEntry(name);
Cursor cursor = cacheDb.openCursor(txn, null);
+ lock.acquireLock(name, true);
try
{
OperationStatus status = cursor.putNoOverwrite(keyEntry, dataEntry);
@@ -492,6 +520,7 @@
}
finally
{
+ lock.releaseLock(name);
cursor.close();
}
return oldVal;
@@ -538,6 +567,7 @@
DatabaseEntry dataEntry = makeDataEntry(values);
DatabaseEntry keyEntry = makeKeyEntry(name);
Cursor cursor = cacheDb.openCursor(txn, null);
+ lock.acquireLock(name, true);
try
{
OperationStatus status = cursor.putNoOverwrite(keyEntry, dataEntry);
@@ -562,6 +592,7 @@
}
finally
{
+ lock.releaseLock(name);
cursor.close();
}
}
@@ -580,6 +611,7 @@
DatabaseEntry dataEntry = makeDataEntry(values);
DatabaseEntry keyEntry = makeKeyEntry(name);
Cursor cursor = cacheDb.openCursor(txn, null);
+ lock.acquireLock(name, true);
try
{
cursor.put(keyEntry, dataEntry);
@@ -587,6 +619,7 @@
}
finally
{
+ lock.releaseLock(name);
cursor.close();
}
}
@@ -709,6 +742,7 @@
DatabaseEntry foundData = new DatabaseEntry();
foundData.setPartial(0, 0, true);
Cursor cursor = cacheDb.openCursor(txn, null);
+ lock.acquireLock(name, true);
try
{
OperationStatus status =
@@ -726,6 +760,7 @@
}
finally
{
+ lock.releaseLock(name);
cursor.close();
}
}
@@ -769,6 +804,7 @@
DatabaseEntry keyEntry = makeKeyEntry(name);
DatabaseEntry foundData = new DatabaseEntry();
Cursor cursor = cacheDb.openCursor(txn, null);
+ lock.acquireLock(name, true);
try
{
OperationStatus status =
@@ -782,6 +818,7 @@
}
finally
{
+ lock.releaseLock(name);
cursor.close();
}
return oldVal;
@@ -819,6 +856,7 @@
dataEntry.setPartial(0, 0, true);
DatabaseEntry keyEntry = makeKeyEntry(name);
Cursor cursor = cacheDb.openCursor(txn, null);
+ lock.acquireLock(name, true);
try
{
OperationStatus status =
@@ -830,6 +868,7 @@
}
finally
{
+ lock.releaseLock(name);
cursor.close();
}
}
More information about the jboss-cvs-commits
mailing list