[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