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());
}
{
sup = al.getOtherGNode( gnodes ) ;
reg.addNodeBeg( (Node) sup.getNode() ) ;
- delGNodeFromList( (Node) sup.getNode() ) ;
+ delGNodeFromList( (Node) sup.getNode(), 0 ) ;
}
}
/** Recherche nouveau noeud **/
/*****************************************/
- protected GNode delGNodeFromList( Node _n )
+ protected GNode delGNodeFromList( Node _n, int _mode )
{
GNode removedGNode = null ;
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 ;
if( _deadNode != null )
{
- gnode = delGNodeFromList( _deadNode ) ;
-
+ authorized = true ;
+
+ gnode = delGNodeFromList( _deadNode, 1 ) ;
+
remp = al.replaceNode( gnode, gnodes ) ;
if( remp != null )
System.out.println( "Replacing node found." ) ;
node = (Node) remp.getNode() ;
- authorized = true ;
-
- delGNodeFromList( node ) ;
+ delGNodeFromList( node, 0 ) ;
/** Updating all mapping **/
updateMappedNode( gnode, remp ) ;
authorized = true ;
- delGNodeFromList( node ) ;
+ delGNodeFromList( node, 0 ) ;
authorized = false ;
* @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 )
{
{
if( _g != null )
{
- workingOnGnodes() ;
+ boolean free = false ;
+
+ if( ! operating )
+ {
+ workingOnGnodes() ;
+ free = true ;
+ }
gnodes.add( _g ) ;
- operating = false ;
+ if( free )
+ operating = false ;
}
}
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() ) ;
}
}
}
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() ) ;
}
}
}
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() ) ;
}
}
}