You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gd...@apache.org on 2004/07/05 09:03:50 UTC

cvs commit: incubator-geronimo/sandbox/messaging/src/test/org/apache/geronimo/messaging/remotenode RemoteNodeManagerImplTest.java

gdamour     2004/07/05 00:03:50

  Modified:    sandbox/messaging/src/test/org/apache/geronimo/messaging
                        NodeImplTest.java
               sandbox/messaging/src/java/org/apache/geronimo/messaging
                        NodeTopology.java NodeImpl.java
               sandbox/messaging/src/test/org/apache/geronimo/messaging/admin/deployment
                        AdminServerTest.java
               sandbox/messaging/src/java/org/apache/geronimo/messaging/remotenode
                        LogicalCompression.java
               sandbox/messaging/src/java/org/apache/geronimo/messaging/cluster/topology
                        RingTopologyManager.java
               sandbox/messaging/src/test/org/apache/geronimo/messaging/remotenode
                        RemoteNodeManagerImplTest.java
  Log:
  o NodeTopology defines now a version; and
  o Re-enables LogicalCompression, which yields a performance improvement of 15%.
  
  Revision  Changes    Path
  1.4       +6 -5      incubator-geronimo/sandbox/messaging/src/test/org/apache/geronimo/messaging/NodeImplTest.java
  
  Index: NodeImplTest.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/sandbox/messaging/src/test/org/apache/geronimo/messaging/NodeImplTest.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- NodeImplTest.java	10 Jun 2004 23:12:24 -0000	1.3
  +++ NodeImplTest.java	5 Jul 2004 07:03:50 -0000	1.4
  @@ -109,7 +109,7 @@
           
           // Sets the topology.
           NodeTopology topology =
  -                new MockTopology(nodeInfo1, nodeInfo2, nodeInfo3, nodeInfo4);
  +            new MockTopology(nodeInfo1, nodeInfo2, nodeInfo3, nodeInfo4);
           node1.setTopology(topology);
       }
   
  @@ -145,9 +145,7 @@
       public static void main(String[] args) throws Exception {
           NodeImplTest test = new NodeImplTest();
           test.setUp();
  -        while ( true ) {
  -            test.testInputStreamPerformance();
  -        }
  +        test.testSendRawPerformance();
       }
       
       public void testSendRawPerformance() throws Exception {
  @@ -313,6 +311,9 @@
           }
           public Set getNodes() {
               throw new IllegalArgumentException("Not expected");
  +        }
  +        public int getVersion() {
  +            return 0;
           }
       }
       
  
  
  
  1.4       +8 -1      incubator-geronimo/sandbox/messaging/src/java/org/apache/geronimo/messaging/NodeTopology.java
  
  Index: NodeTopology.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/sandbox/messaging/src/java/org/apache/geronimo/messaging/NodeTopology.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- NodeTopology.java	10 Jun 2004 23:12:24 -0000	1.3
  +++ NodeTopology.java	5 Jul 2004 07:03:50 -0000	1.4
  @@ -31,6 +31,13 @@
   {
   
       /**
  +     * Gets the version of this topology.
  +     * 
  +     * @return version number.
  +     */
  +    public int getVersion();
  +    
  +    /**
        * Gets the neighbours of the specified node. They are the nodes directly
        * reachable from aRoot. 
        * 
  
  
  
  1.6       +22 -8     incubator-geronimo/sandbox/messaging/src/java/org/apache/geronimo/messaging/NodeImpl.java
  
  Index: NodeImpl.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/sandbox/messaging/src/java/org/apache/geronimo/messaging/NodeImpl.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- NodeImpl.java	10 Jun 2004 23:12:24 -0000	1.5
  +++ NodeImpl.java	5 Jul 2004 07:03:50 -0000	1.6
  @@ -119,6 +119,11 @@
       private NodeTopology nodeTopology;
       
       /**
  +     * To serialize the topology changes.
  +     */
  +    private final Object topologyMonitor;
  +    
  +    /**
        * Creates a Node.
        * 
        * @param aNodeInfo Node meta-data.
  @@ -142,6 +147,7 @@
           clockPool = aClockPool;
           
           replacerResolver = new MsgReplacerResolver();
  +        topologyMonitor = new Object();
   
           streamManager = newStreamManager();
           referenceableManager = newReferenceableManager();
  @@ -177,10 +183,16 @@
       }
       
       public void setTopology(NodeTopology aTopology) {
  -        cascadeTopology(aTopology, Collections.EMPTY_SET);
  +        synchronized(topologyMonitor) {
  +            cascadeTopology(aTopology, Collections.EMPTY_SET);
  +        }
       }
  -
  +    
       private void cascadeTopology(NodeTopology aTopology, Set aSetOfProcessed) {
  +        // Registers a future topology here. This way neighbours can start to
  +        // send Msgs compressed with the new topology.
  +        compression.registerFutureTopology(aTopology);
  +        
           // Applies the new topology.
           nodeManager.setTopology(aTopology);
   
  @@ -211,15 +223,11 @@
           try {
               // Cascades the new topology to all of them.
               topologyEndPoint.cascadeTopology(aTopology, processed);
  -        } catch (Throwable e) {
  -            e.printStackTrace();
           } finally {
               endPointProxyFactory.releaseProxy(topologyEndPoint);
           }
           
  -        // TODO re-introduces logical compression when dynamic reconfiguration
  -        // of topology will support 2PC.
  -//        compression.setTopology(aTopology);
  +        compression.registerTopology(aTopology);
           nodeTopology = aTopology;
       }
       
  @@ -270,6 +278,12 @@
                   Set result = new HashSet();
                   result.add(nodeInfo);
                   return result;
  +            }
  +            public int getVersion() {
  +                return 0;
  +            }
  +            public void setVersion(int aVersion) {
  +                throw new UnsupportedOperationException();
               }
           };
           setTopology(topology);
  
  
  
  1.3       +4 -1      incubator-geronimo/sandbox/messaging/src/test/org/apache/geronimo/messaging/admin/deployment/AdminServerTest.java
  
  Index: AdminServerTest.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/sandbox/messaging/src/test/org/apache/geronimo/messaging/admin/deployment/AdminServerTest.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AdminServerTest.java	10 Jun 2004 23:12:24 -0000	1.2
  +++ AdminServerTest.java	5 Jul 2004 07:03:50 -0000	1.3
  @@ -91,6 +91,9 @@
                   nodes.add(nodeInfo2);
                   return nodes;
               }
  +            public int getVersion() {
  +                return 0;
  +            }
           });
           
           Map factories = node.getMockFactoryEndPointProxy();
  
  
  
  1.3       +39 -10    incubator-geronimo/sandbox/messaging/src/java/org/apache/geronimo/messaging/remotenode/LogicalCompression.java
  
  Index: LogicalCompression.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/sandbox/messaging/src/java/org/apache/geronimo/messaging/remotenode/LogicalCompression.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LogicalCompression.java	24 Jun 2004 23:52:12 -0000	1.2
  +++ LogicalCompression.java	5 Jul 2004 07:03:50 -0000	1.3
  @@ -46,9 +46,14 @@
   {
   
       /**
  -     * Topology shared knowledge.   
  +     * Future topology.
        */
  -    private NodeTopology topology;
  +    private NodeTopology futTopology;
  +    
  +    /**
  +     * Current registered topology.
  +     */
  +    private NodeTopology curTopology;
       
       /**
        * No logical compression.
  @@ -70,12 +75,25 @@
        */
       private final static byte RESPONSE = (byte) 1;
   
  -    public NodeTopology getTopology() {
  -        return topology;
  +    /**
  +     * Registers a future topology. It is only used to uncompress Msgs which
  +     * have not been compressed by the current topology. 
  +     * 
  +     * @param aTopology Future topology.
  +     */
  +    public void registerFutureTopology(NodeTopology aTopology) {
  +        futTopology = aTopology;
       }
  -
  -    public void setTopology(NodeTopology aTopology) {
  -        topology = aTopology;
  +    
  +    /**
  +     * Registers the current topology. It is used to compress and uncompress
  +     * Msgs. If it is not possible to uncompress a Msg with the current
  +     * topology, then the future topology is used.
  +     * 
  +     * @param aTopology Current topology.
  +     */
  +    public void registerTopology(NodeTopology aTopology) {
  +        curTopology = aTopology;
       }
       
       public Object beforePop(StreamInputStream anIn)
  @@ -93,8 +111,17 @@
           if ( type == NULL ) {
               return result;
           }
  +        int version = anIn.readInt();
  +        NodeTopology topology = null;
  +        if ( null != curTopology && version == curTopology.getVersion() ) {
  +            topology = curTopology;
  +        } else if ( null != futTopology &&
  +            version == futTopology.getVersion() ) {
  +            topology = futTopology;
  +        }
           if ( null == topology ) {
  -            throw new IllegalArgumentException("No topology is defined.");
  +            throw new IllegalArgumentException("No topology with version {" +
  +                version + "} is defined.");
           }
           int id = anIn.readInt();
           NodeInfo nodeInfo = topology.getNodeById(id);
  @@ -107,7 +134,7 @@
           id = anIn.readInt();
           nodeInfo = topology.getNodeById(id);
           result.add(nodeInfo);
  -        return result.toArray();
  +        return result;
       }
       
       public void afterPop(StreamInputStream anIn, Msg aMsg, Object anOpaque)
  @@ -137,11 +164,13 @@
           RequestSender.RequestID reqID  = (RequestSender.RequestID)
               header.resetHeader(MsgHeaderConstants.CORRELATION_ID);
           anOut.writeByte(reqID.getID());
  +        NodeTopology topology = curTopology;
           if ( null == topology ) {
               anOut.writeByte(NULL);
               return null;
           }
           anOut.writeByte(TOPOLOGY);
  +        anOut.writeInt(topology.getVersion());
           
           NodeInfo info =
               (NodeInfo) header.resetHeader(MsgHeaderConstants.SRC_NODE);
  
  
  
  1.2       +11 -2     incubator-geronimo/sandbox/messaging/src/java/org/apache/geronimo/messaging/cluster/topology/RingTopologyManager.java
  
  Index: RingTopologyManager.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/sandbox/messaging/src/java/org/apache/geronimo/messaging/cluster/topology/RingTopologyManager.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- RingTopologyManager.java	10 Jun 2004 23:12:25 -0000	1.1
  +++ RingTopologyManager.java	5 Jul 2004 07:03:50 -0000	1.2
  @@ -72,10 +72,14 @@
   
       private static class RingTopology implements NodeTopology {
   
  +        private static int versionSeq = 0;
  +        
           private final List nodes;
           private final Set nodeSet;
           private final NodeInfo[] nodeArray;
           private final NodeInfo[] nodeArrayInv;
  +        private final int version;
  +        
           
           private RingTopology(List aNodes) {
               nodes = aNodes;
  @@ -86,6 +90,7 @@
               for (int i = 0; i < length; i++) {
                   nodeArrayInv[i] = nodeArray[length - i - 1];
               }
  +            version = versionSeq++;
           }
           
           public Set getNeighbours(NodeInfo aRoot) {
  @@ -146,7 +151,11 @@
           public Set getNodes() {
               return nodeSet;
           }
  -        
  +
  +        public int getVersion() {
  +            return version;
  +        }
  +
       }
       
   }
  
  
  
  1.3       +4 -25     incubator-geronimo/sandbox/messaging/src/test/org/apache/geronimo/messaging/remotenode/RemoteNodeManagerImplTest.java
  
  Index: RemoteNodeManagerImplTest.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/sandbox/messaging/src/test/org/apache/geronimo/messaging/remotenode/RemoteNodeManagerImplTest.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- RemoteNodeManagerImplTest.java	10 Jun 2004 23:12:25 -0000	1.2
  +++ RemoteNodeManagerImplTest.java	5 Jul 2004 07:03:50 -0000	1.3
  @@ -127,6 +127,9 @@
               public Set getNodes() {
                   return null;
               }
  +            public int getVersion() {
  +                return 0;
  +            }
           };
           manager.setTopology(topology);
   
  @@ -170,30 +173,6 @@
           public void fireRemoteNodeEvent(RemoteNodeEvent anEvent) {
               event = anEvent;
           }
  -    }
  -
  -    private class MockTopology implements NodeTopology {
  -
  -        public Set getNeighbours(NodeInfo aRoot) {
  -            return null;
  -        }
  -
  -        public NodeInfo[] getPath(NodeInfo aSource, NodeInfo aTarget) {
  -            return null;
  -        }
  -
  -        public int getIDOfNode(NodeInfo aNodeInfo) {
  -            return 0;
  -        }
  -
  -        public NodeInfo getNodeById(int anId) {
  -            return null;
  -        }
  -
  -        public Set getNodes() {
  -            return null;
  -        }
  -
       }
       
   }