delGNodeFromList( node ) ;
+ /** Updating all mapping **/
+ updateMappedNode( gnode, remp ) ;
+ propagateReplaceNode( gnode, remp ) ;
+
authorized = false ;
SuperNodeListe.Instance().forwardCountNode();
return node ;
}
+ @Override
+ public void updateMappedNode( GNode _dead, GNode _remp )
+ {
+ int pos = 0 ;
+ pos = al.getMapping().getIdOfAssociation( _dead ) ;
+
+ if( pos == -1 )
+ {
+ System.err.println( "GNode "+_dead+" does not exist in the mapping!" ) ;
+ return ;
+ }
+
+ al.getMapping().getMapping().get( pos ).setGNode( _remp ) ;
+
+ System.out.println( "Succesfully replacing the fallen node in the mapping." ) ;
+ }
+
+ /**
+ * Inform all SuperNodes of the replacement of a fallen computing node.
+ * @param _dead The fallen node
+ * @param _remp The replacing node
+ */
+ private void propagateReplaceNode( GNode _dead, GNode _remp )
+ {
+ if( _dead != null && _remp != null )
+ {
+ SuperNodeListe.Instance().propagateReplaceNode( _dead, _remp ) ;
+ }
+ }
+
/**********************************************************/
/**********************************************************/
@Override
+ /**
+ * Add a new node in the list.
+ * @param _g The new node
+ */
public void addGNode( GNode _g ) throws RemoteException
{
if( _g != null )
if( ((Node)gnodes.get(i).getNode()).getId() == ((Node)_g.getNode()).getId() )
{
gnodes.remove( i ) ;
+ Register.Instance().removeNodeOfName( _g.getName() ) ;
break ;
}
}
}
}
+ public void propagateReplaceNode( GNode _dead, GNode _remp )
+ {
+ if( _dead != null && _remp != null )
+ {
+ SuperNodeData d = null ;
+ JaceSuperNodeInterface remoteStub = null ;
+
+ for( int i = 0 ; i < liste.size() ; i++ )
+ {
+ d = (SuperNodeData) liste.elementAt( i ) ;
+ 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() ) ;
+ }
+ }
+ }
+ }
+ }
+
}