[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