[jboss-cvs] JBossCache/src/org/jboss/cache/statetransfer ...
Brian Stansberry
brian.stansberry at jboss.com
Thu Dec 21 18:16:12 EST 2006
User: bstansberry
Date: 06/12/21 18:16:12
Modified: src/org/jboss/cache/statetransfer Tag:
Branch_JBossCache_1_4_0
StateTransferIntegrator_123.java
StateTransferIntegrator_124.java
StateTransferIntegrator_140.java
StateTransferIntegrator_1241.java
Log:
[JBCACHE-913] Handle TreeCacheListener notifications as before to reduce chance of introducing subtle regressions
Don't fail if there is no region defined
Add the logic to all the STI impls
Revision Changes Path
No revision
No revision
1.2.4.1 +58 -1 JBossCache/src/org/jboss/cache/statetransfer/Attic/StateTransferIntegrator_123.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: StateTransferIntegrator_123.java
===================================================================
RCS file: /cvsroot/jboss/JBossCache/src/org/jboss/cache/statetransfer/Attic/StateTransferIntegrator_123.java,v
retrieving revision 1.2
retrieving revision 1.2.4.1
diff -u -b -r1.2 -r1.2.4.1
--- StateTransferIntegrator_123.java 21 Feb 2006 01:12:50 -0000 1.2
+++ StateTransferIntegrator_123.java 21 Dec 2006 23:16:12 -0000 1.2.4.1
@@ -16,6 +16,9 @@
import org.jboss.cache.Node;
import org.jboss.cache.TreeCache;
import org.jboss.cache.TreeNode;
+import org.jboss.cache.eviction.EvictedEventNode;
+import org.jboss.cache.eviction.Region;
+import org.jboss.cache.eviction.RegionManager;
import org.jboss.cache.loader.CacheLoader;
import org.jgroups.util.Util;
@@ -79,11 +82,32 @@
for (Iterator iter = children.entrySet().iterator(); iter.hasNext();)
{
Map.Entry entry = (Map.Entry) iter.next();
- target.addChild(entry.getKey(), (TreeNode) entry.getValue());
+ TreeNode child = (TreeNode) entry.getValue();
+ target.addChild(entry.getKey(), child);
}
}
target.setRecursiveTreeCacheInstance(cache); // need to set this at root and set it recursively
+
+ if (children != null)
+ {
+ RegionManager erm = cache.getEvictionRegionManager();
+ if (erm != null)
+ {
+ Region[] regions = erm.getRegions();
+ if (regions == null || regions.length == 0)
+ erm = null;
+ }
+
+ if (erm != null)
+ {
+ for (Iterator iter = children.values().iterator(); iter.hasNext();)
+ {
+ sendEvictionNotifications((TreeNode) iter.next(), erm);
+ }
+ }
+ }
+
log.info("setting the transient state was successful");
}
catch(Throwable t)
@@ -117,7 +141,40 @@
}
}
}
+ }
+
+ private void sendEvictionNotifications(TreeNode node, RegionManager erm)
+ {
+ Fqn fqn = node.getFqn();
+ Region region = null;
+ try
+ {
+ region = erm.getRegion(fqn);
+ }
+ catch (RuntimeException e)
+ {
+ if (erm.hasRegion(RegionManager.DEFAULT_REGION))
+ throw e;
+ // else the fqn is not associated with an eviction region
+ }
+
+ if (region != null)
+ {
+ Map attrs = node.getData();
+ region.putNodeEvent(new EvictedEventNode(fqn, EvictedEventNode.ADD_NODE_EVENT,
+ attrs == null ? 0 : attrs.size()));
+ }
+
+ // Walk the tree
+ Map children = node.getChildren();
+ if (children != null)
+ {
+ for (Iterator iter = children.values().iterator(); iter.hasNext();)
+ {
+ sendEvictionNotifications((TreeNode) iter.next(), erm);
+ }
+ }
}
}
1.6.2.1 +39 -4 JBossCache/src/org/jboss/cache/statetransfer/Attic/StateTransferIntegrator_124.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: StateTransferIntegrator_124.java
===================================================================
RCS file: /cvsroot/jboss/JBossCache/src/org/jboss/cache/statetransfer/Attic/StateTransferIntegrator_124.java,v
retrieving revision 1.6
retrieving revision 1.6.2.1
diff -u -b -r1.6 -r1.6.2.1
--- StateTransferIntegrator_124.java 9 Apr 2006 12:33:49 -0000 1.6
+++ StateTransferIntegrator_124.java 21 Dec 2006 23:16:12 -0000 1.6.2.1
@@ -20,6 +20,9 @@
import org.jboss.cache.TreeCache;
import org.jboss.cache.aop.InternalDelegate;
import org.jboss.cache.aop.PojoCache;
+import org.jboss.cache.eviction.EvictedEventNode;
+import org.jboss.cache.eviction.Region;
+import org.jboss.cache.eviction.RegionManager;
import org.jboss.cache.factories.NodeFactory;
import org.jboss.cache.loader.CacheLoader;
import org.jboss.cache.loader.ExtendedCacheLoader;
@@ -191,13 +194,21 @@
else
target.clear();
- integrateStateTransferChildren(target, in);
+ RegionManager erm = cache.getEvictionRegionManager();
+ if (erm != null)
+ {
+ Region[] regions = erm.getRegions();
+ if (regions == null || regions.length == 0)
+ erm = null;
+ }
+ integrateStateTransferChildren(target, in, erm);
in.close();
}
private NodeData integrateStateTransferChildren(DataNode parent,
- ObjectInputStream in)
+ ObjectInputStream in,
+ RegionManager erm)
throws IOException, ClassNotFoundException
{
int parent_level = parent.getFqn().size();
@@ -220,20 +231,44 @@
name = fqn.get(size - 1);
+ Map attrs = nd.getAttributes();
+
// We handle this NodeData. Create a DataNode and
// integrate its data
DataNode target = factory.createDataNode(nodeType,
name,
fqn,
parent,
- nd.getAttributes(),
+ attrs,
true,
cache);
parent.addChild(name, target);
+ // Make sure any eviction policy is aware of this node
+ if (erm != null)
+ {
+ Region region = null;
+ try
+ {
+ region = erm.getRegion(fqn);
+ }
+ catch (RuntimeException e)
+ {
+ if (erm.hasRegion(RegionManager.DEFAULT_REGION))
+ throw e;
+ // else the fqn is not associated with an eviction region
+ }
+
+ if (region != null)
+ {
+ region.putNodeEvent(new EvictedEventNode(fqn, EvictedEventNode.ADD_NODE_EVENT,
+ attrs == null ? 0 : attrs.size()));
+ }
+ }
+
// Recursively call, which will walk down the tree
// and return the next NodeData that's a child of our parent
- nd = integrateStateTransferChildren(target, in);
+ nd = integrateStateTransferChildren(target, in, erm);
}
}
catch (EOFException eof) {
1.6.2.2 +25 -10 JBossCache/src/org/jboss/cache/statetransfer/Attic/StateTransferIntegrator_140.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: StateTransferIntegrator_140.java
===================================================================
RCS file: /cvsroot/jboss/JBossCache/src/org/jboss/cache/statetransfer/Attic/StateTransferIntegrator_140.java,v
retrieving revision 1.6.2.1
retrieving revision 1.6.2.2
diff -u -b -r1.6.2.1 -r1.6.2.2
--- StateTransferIntegrator_140.java 21 Dec 2006 21:21:05 -0000 1.6.2.1
+++ StateTransferIntegrator_140.java 21 Dec 2006 23:16:12 -0000 1.6.2.2
@@ -222,7 +222,14 @@
// If it is an integration, calculate how many levels of offset
int offset = move ? tgtFqn.size() - tferFqn.size() : 0;
- integrateStateTransferChildren(target, offset, in);
+ RegionManager erm = cache.getEvictionRegionManager();
+ if (erm != null)
+ {
+ Region[] regions = erm.getRegions();
+ if (regions == null || regions.length == 0)
+ erm = null;
+ }
+ integrateStateTransferChildren(target, offset, in, erm);
in.close();
@@ -231,7 +238,8 @@
private NodeData integrateStateTransferChildren(DataNode parent,
int offset,
- ObjectInputStream in)
+ ObjectInputStream in,
+ RegionManager erm)
throws IOException, ClassNotFoundException
{
int parent_level = parent.getFqn().size();
@@ -271,14 +279,21 @@
cache);
parent.addChild(name, target);
- // Send out the TreeCacheListener notification
- cache.notifyNodeCreated(fqn);
-
// Make sure any eviction policy is aware of this node
- RegionManager rm = cache.getEvictionRegionManager();
- if (rm != null)
+ if (erm != null)
+ {
+ Region region = null;
+ try
{
- Region region = rm.getRegion(fqn);
+ region = erm.getRegion(fqn);
+ }
+ catch (RuntimeException e)
+ {
+ if (erm.hasRegion(RegionManager.DEFAULT_REGION))
+ throw e;
+ // else the fqn is not associated with an eviction region
+ }
+
if (region != null)
{
region.putNodeEvent(new EvictedEventNode(fqn, EvictedEventNode.ADD_NODE_EVENT,
@@ -288,7 +303,7 @@
// Recursively call, which will walk down the tree
// and return the next NodeData that's a child of our parent
- nd = integrateStateTransferChildren(target, offset, in);
+ nd = integrateStateTransferChildren(target, offset, in, erm);
}
}
catch (EOFException eof) {
1.4.2.1 +39 -4 JBossCache/src/org/jboss/cache/statetransfer/Attic/StateTransferIntegrator_1241.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: StateTransferIntegrator_1241.java
===================================================================
RCS file: /cvsroot/jboss/JBossCache/src/org/jboss/cache/statetransfer/Attic/StateTransferIntegrator_1241.java,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -b -r1.4 -r1.4.2.1
--- StateTransferIntegrator_1241.java 22 Apr 2006 00:34:27 -0000 1.4
+++ StateTransferIntegrator_1241.java 21 Dec 2006 23:16:12 -0000 1.4.2.1
@@ -20,6 +20,9 @@
import org.jboss.cache.TreeCache;
import org.jboss.cache.aop.InternalDelegate;
import org.jboss.cache.aop.PojoCache;
+import org.jboss.cache.eviction.EvictedEventNode;
+import org.jboss.cache.eviction.Region;
+import org.jboss.cache.eviction.RegionManager;
import org.jboss.cache.factories.NodeFactory;
import org.jboss.cache.loader.CacheLoader;
import org.jboss.cache.loader.ExtendedCacheLoader;
@@ -203,13 +206,21 @@
else
target.clear();
- integrateStateTransferChildren(target, in);
+ RegionManager erm = cache.getEvictionRegionManager();
+ if (erm != null)
+ {
+ Region[] regions = erm.getRegions();
+ if (regions == null || regions.length == 0)
+ erm = null;
+ }
+ integrateStateTransferChildren(target, in, erm);
in.close();
}
private NodeData integrateStateTransferChildren(DataNode parent,
- ObjectInputStream in)
+ ObjectInputStream in,
+ RegionManager erm)
throws IOException, ClassNotFoundException
{
int parent_level = parent.getFqn().size();
@@ -232,20 +243,44 @@
name = fqn.get(size - 1);
+ Map attrs = nd.getAttributes();
+
// We handle this NodeData. Create a DataNode and
// integrate its data
DataNode target = factory.createDataNode(nodeType,
name,
fqn,
parent,
- nd.getAttributes(),
+ attrs,
true,
cache);
parent.addChild(name, target);
+ // Make sure any eviction policy is aware of this node
+ if (erm != null)
+ {
+ Region region = null;
+ try
+ {
+ region = erm.getRegion(fqn);
+ }
+ catch (RuntimeException e)
+ {
+ if (erm.hasRegion(RegionManager.DEFAULT_REGION))
+ throw e;
+ // else the fqn is not associated with an eviction region
+ }
+
+ if (region != null)
+ {
+ region.putNodeEvent(new EvictedEventNode(fqn, EvictedEventNode.ADD_NODE_EVENT,
+ attrs == null ? 0 : attrs.size()));
+ }
+ }
+
// Recursively call, which will walk down the tree
// and return the next NodeData that's a child of our parent
- nd = integrateStateTransferChildren(target, in);
+ nd = integrateStateTransferChildren(target, in, erm);
}
}
catch (EOFException eof) {
More information about the jboss-cvs-commits
mailing list