Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Correcting some bugs about nodes fault tolerance.
authorSébastien Miquée <sebastien.miquee@univ-fcomte.fr>
Thu, 18 Feb 2010 01:03:17 +0000 (02:03 +0100)
committerSébastien Miquée <sebastien.miquee@univ-fcomte.fr>
Thu, 18 Feb 2010 01:03:17 +0000 (02:03 +0100)
- Problem in some methods are corrected.

src/jaceP2P/JaceSpawner.java
src/jaceP2P/JaceSuperNode.java
src/jaceP2P/JaceSuperNodeInterface.java
src/jaceP2P/JaceSuperNodeServer.java
src/jaceP2P/SuperNodeListe.java

index 66be55a..a6b1244 100644 (file)
@@ -406,6 +406,9 @@ public class JaceSpawner {
                                if( node != null )
                                {
                                        found = true ;
+                               } else {
+                                       Thread.sleep( 1000 ) ;
+                                       System.out.println("Pas de bon retour !");
                                }
                        } catch (Exception e) {
                                // trouver un autre superNode et lui demander le noeud a lui
index 7774b86..c4238b7 100644 (file)
@@ -152,7 +152,7 @@ public class JaceSuperNode {
                                                        index)).setNbOfNodes(Register.Instance().getSize());
                                        SuperNodeListe.Instance().forwardCountNode();
                                        
-                                       GNode deadGNode = snodeServer.delGNodeFromList( host ) ;
+                                       GNode deadGNode = snodeServer.delGNodeFromList( host, 0 ) ;
                                        SuperNodeListe.Instance().removeGNode( deadGNode ) ;
 
                                        // Register.Instance().viewAll();
index 4ae6445..9779ef3 100644 (file)
@@ -54,7 +54,7 @@ public interface JaceSuperNodeInterface extends Remote {
        
        public void setMapping( Algo al ) throws RemoteException ;
 
-       public void updateMappedNode(GNode dead, GNode remp);
+       public void updateMappedNode(GNode dead, GNode remp) throws RemoteException ;
 }
 
 /** ! **/
index 1963ff7..1b06066 100644 (file)
@@ -293,7 +293,7 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements
                        
                        for (int i = 0; i < ag.size(); i++) {
                                reg.addNode((Node) ag.get(i).getNode());
-                               delGNodeFromList( (Node) ag.get(i).getNode() ) ;
+                               delGNodeFromList( (Node) ag.get(i).getNode(), 0 ) ;
 //                             gnodes.remove(ag.get(i));
 //                             Register.Instance().removeNode((Node) ag.get(i).getNode());
                        }
@@ -309,7 +309,7 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements
                                {
                                        sup = al.getOtherGNode( gnodes ) ;
                                        reg.addNodeBeg( (Node) sup.getNode() ) ;
-                                       delGNodeFromList( (Node) sup.getNode() ) ;
+                                       delGNodeFromList( (Node) sup.getNode(), 0 ) ;
                                }
                        }
                        
@@ -340,7 +340,7 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements
        /**      Recherche nouveau noeud        **/
        /*****************************************/
        
-       protected GNode delGNodeFromList( Node _n )
+       protected GNode delGNodeFromList( Node _n, int _mode )
        {
                GNode removedGNode = null ;
                
@@ -354,15 +354,36 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements
                                free = true ;
                        }
                        
-                       for( int i = 0 ; i < gnodes.size() ; i++ )
+                       /** The dead node is not in the mapping **/
+                       if( _mode == 0 )
                        {
-                               if( ((Node)gnodes.get(i).getNode()).getId() == _n.getId() ) 
+                               for( int i = 0 ; i < gnodes.size() ; i++ )
                                {
-                                       removedGNode = gnodes.remove( i ) ;
-                                       Register.Instance().removeNodeOfName( removedGNode.getName() ) ;
-                                       break ;
+                                       if( ((Node)gnodes.get(i).getNode()).getId() == _n.getId() ) 
+                                       {
+                                               removedGNode = gnodes.remove( i ) ;
+                                               Register.Instance().removeNodeOfName( removedGNode.getName() ) ;
+                                               break ;
+                                       }
                                }
                        }
+                       
+                       /** The dead node is in the mapping **/
+                       if( _mode == 1 )
+                       {
+                               ArrayList<GNode> temp = al.getMapping().getMappedGNodes() ;
+                               
+                               for( int i = 0 ; i < temp.size() ; i++ )
+                               {
+                                       if( ((Node)temp.get(i).getNode()).getId() == _n.getId() ) 
+                                       {
+                                               removedGNode = temp.get( i ) ;
+                                               Register.Instance().removeNodeOfName( removedGNode.getName() ) ;
+                                               break ;
+                                       }
+                               }       
+                       }
+                       
                
 //             daemonListChange = true ;
                
@@ -421,8 +442,10 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements
                
                if( _deadNode != null )
                {
-                       gnode = delGNodeFromList( _deadNode ) ;
-               
+                       authorized = true ;
+                       
+                       gnode = delGNodeFromList( _deadNode, 1 ) ;
+
                        remp = al.replaceNode( gnode, gnodes ) ;
                
                        if( remp != null )
@@ -430,9 +453,7 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements
                                System.out.println( "Replacing node found." ) ;
                                node = (Node) remp.getNode() ;
                                
-                               authorized = true ;
-                               
-                               delGNodeFromList( node ) ;
+                               delGNodeFromList( node, 0 ) ;
                                
                                /** Updating all mapping **/
                                updateMappedNode( gnode, remp ) ;
@@ -454,7 +475,7 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements
                                
                                authorized = true ;
                                
-                               delGNodeFromList( node ) ;
+                               delGNodeFromList( node, 0 ) ;
                                
                                authorized = false ;
                                
@@ -493,7 +514,7 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements
         * @param _dead The fallen node
         * @param _remp The replacing node
         */
-       private void propagateReplaceNode( GNode _dead, GNode _remp ) 
+       private void propagateReplaceNode( GNode _dead, GNode _remp ) throws RemoteException
        {
                if( _dead != null && _remp != null )
                {       
@@ -513,11 +534,18 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements
        {
                if( _g != null )
                {
-                       workingOnGnodes() ;
+                       boolean free = false ;
+                       
+                       if( ! operating )
+                       {
+                               workingOnGnodes() ;
+                               free = true ;
+                       }       
                        
                        gnodes.add( _g ) ;
                        
-                       operating = false ;
+                       if( free )
+                               operating = false ;
                }
        }
        
index 82facfc..df26230 100644 (file)
@@ -412,7 +412,7 @@ public class SuperNodeListe implements Cloneable {
                                try {
                                        ok = ok && remoteStub.blockForMapping() ;
                                } catch( Exception e ) {
-                                       System.err.println( "Unable to remove GNode at SuperNode " + d.getIP() ) ;
+                                       System.err.println( "Unable to remove GNode on SuperNode " + d.getIP() ) ;
                                }
                        }
                }
@@ -437,7 +437,7 @@ public class SuperNodeListe implements Cloneable {
                                        try {
                                                remoteStub.setMapping( al ) ;
                                        } catch( Exception e ) {
-                                               System.err.println( "Unable to set mapping data at SuperNode " + d.getIP() ) ;
+                                               System.err.println( "Unable to set mapping data on SuperNode " + d.getIP() ) ;
                                        }
                                }
                        }
@@ -454,14 +454,14 @@ public class SuperNodeListe implements Cloneable {
                        for( int i = 0 ; i < liste.size() ; i++ ) 
                        {
                                d = (SuperNodeData) liste.elementAt( i ) ;
-                               if( ! d.getIP().equals(LocalHost.Instance().getIP() ) ) 
+                               if( ! d.getIP().equals( LocalHost.Instance().getIP() ) ) 
                                {
                                        // if not me, I inform the other super nodes
                                        remoteStub = d.getStub() ;
                                        try {
                                                remoteStub.updateMappedNode( _dead, _remp ) ;
                                        } catch( Exception e ) {
-                                               System.err.println( "Unable to set mapping data at SuperNode " + d.getIP() ) ;
+                                               System.err.println( "Unable to propagate replacing node on SuperNode " + d.getIP() ) ;
                                        }
                                }
                        }