[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