[jbosscache-commits] JBoss Cache SVN: r4697 - in core/trunk/src/main/java/org/jboss/cache: marshall and 1 other directory.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Fri Oct 26 11:03:51 EDT 2007


Author: manik.surtani at jboss.com
Date: 2007-10-26 11:03:50 -0400 (Fri, 26 Oct 2007)
New Revision: 4697

Modified:
   core/trunk/src/main/java/org/jboss/cache/Region.java
   core/trunk/src/main/java/org/jboss/cache/RegionImpl.java
   core/trunk/src/main/java/org/jboss/cache/RegionManager.java
   core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java
Log:
Regions now have 4 states instead of 2: Active, Inactive, Activating, Inactivating - prevents regions from PROVIDING state until they have RECEIVED state.  The source of a lot of concurrency headaches.

Modified: core/trunk/src/main/java/org/jboss/cache/Region.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/Region.java	2007-10-26 14:42:30 UTC (rev 4696)
+++ core/trunk/src/main/java/org/jboss/cache/Region.java	2007-10-26 15:03:50 UTC (rev 4697)
@@ -43,6 +43,14 @@
    }
 
    /**
+    * Region status
+    */
+   public enum Status
+   {
+      ACTIVATING, ACTIVE, INACTIVATING, INACTIVE
+   }
+
+   /**
     * Registers a specific {@link ClassLoader} for this region,
     * overridding the default cache class loader.
     *
@@ -193,4 +201,16 @@
     */
    Fqn getFqn();
 
+   /**
+    * A mechanism to set status of a region, more fine grained control than just setActive();
+    * @param status status of the region
+    * @since 2.1.0
+    */
+   void setStatus(Status status);
+
+   /**
+    * @return the region's status
+    */
+   Status getStatus();
+
 }

Modified: core/trunk/src/main/java/org/jboss/cache/RegionImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/RegionImpl.java	2007-10-26 14:42:30 UTC (rev 4696)
+++ core/trunk/src/main/java/org/jboss/cache/RegionImpl.java	2007-10-26 15:03:50 UTC (rev 4697)
@@ -31,7 +31,7 @@
 
    private RegionManager regionManager;
    private Fqn fqn;
-   private boolean active;
+   private Status status;
    private ClassLoader classLoader;
    private BlockingQueue<EvictedEventNode> nodeEventQueue = null;
    private int capacityWarnThreshold = 0;
@@ -45,7 +45,7 @@
    {
       this.fqn = fqn;
       this.regionManager = regionManager;
-      this.active = !regionManager.isDefaultInactive();
+      status = !regionManager.isDefaultInactive() ? Status.ACTIVE : Status.INACTIVE;
    }
 
    /**
@@ -80,24 +80,24 @@
    public void activate()
    {
       regionManager.activate(fqn);
-      active = true;
+      status = Status.ACTIVE;
    }
 
    public void activateIfEmpty()
    {
       regionManager.activateIfEmpty(fqn);
-      active = true;
+      status = Status.ACTIVE;
    }
 
    public void deactivate()
    {
       regionManager.deactivate(fqn);
-      active = false;
+      status = Status.INACTIVE;
    }
 
    public boolean isActive()
    {
-      return active;
+      return status == Status.ACTIVE;
    }
 
    public ClassLoader getClassLoader()
@@ -110,9 +110,19 @@
       return fqn;
    }
 
+   public void setStatus(Status status)
+   {
+      this.status = status;
+   }
+
+   public Status getStatus()
+   {
+      return status;
+   }
+
    public void setActive(boolean b)
    {
-      active = b;
+      status = b ? Status.ACTIVE : Status.INACTIVE;
    }
 
    // -------- eviction stuff -----
@@ -135,7 +145,7 @@
       return "RegionImpl{" +
               "fqn=" + fqn +
               "; classloader="+ classLoader +
-              "; active=" + active +
+              "; status=" + status +
               "; eviction=" + (getEvictionPolicy() != null) +
               "; timerThreadRegistered=" + (getEvictionPolicy() != null && regionManager.getEvictionTimerTask().isRegionRegisteredForProcessing(this)) +
               '}';

Modified: core/trunk/src/main/java/org/jboss/cache/RegionManager.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/RegionManager.java	2007-10-26 14:42:30 UTC (rev 4696)
+++ core/trunk/src/main/java/org/jboss/cache/RegionManager.java	2007-10-26 15:03:50 UTC (rev 4697)
@@ -3,6 +3,7 @@
 import net.jcip.annotations.ThreadSafe;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import static org.jboss.cache.Region.Type.*;
 import org.jboss.cache.buddyreplication.BuddyManager;
 import org.jboss.cache.config.ConfigurationException;
 import org.jboss.cache.config.EvictionConfig;
@@ -10,7 +11,6 @@
 import org.jboss.cache.eviction.EvictionTimerTask;
 import org.jboss.cache.eviction.RegionNameConflictException;
 import org.jboss.cache.lock.NodeLock;
-import static org.jboss.cache.Region.Type.*;
 import org.jgroups.Address;
 
 import java.util.ArrayList;
@@ -295,6 +295,7 @@
             else
             {
                //r.activate();
+               r.setStatus(Region.Status.ACTIVATING);
                if (cache.getConfiguration().isFetchInMemoryState())
                {
                   activateRegion(r.getFqn(), suppressRegionNotEmptyException);
@@ -307,6 +308,7 @@
             // "Active" region is not the default, so create a region
             r = getRegion(fqn, true);
             // FIXME - persistent state transfer counts too!
+            r.setStatus(Region.Status.ACTIVATING);
             if (cache.getConfiguration().isFetchInMemoryState())
             {
                activateRegion(r.getFqn(), suppressRegionNotEmptyException);

Modified: core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java	2007-10-26 14:42:30 UTC (rev 4696)
+++ core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java	2007-10-26 15:03:50 UTC (rev 4697)
@@ -10,6 +10,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.jboss.cache.Fqn;
 import org.jboss.cache.Region;
+import static org.jboss.cache.Region.Status;
 import org.jboss.cache.RegionManager;
 import org.jboss.cache.buddyreplication.GravitateResult;
 import org.jboss.cache.optimistic.DefaultDataVersion;
@@ -212,7 +213,8 @@
 
       if (region != null)
       {
-         if (!region.isActive())
+         Status status = region.getStatus();
+         if (status == Status.INACTIVATING || status == Status.INACTIVE)
          {
             if (log.isDebugEnabled())
             {




More information about the jbosscache-commits mailing list