From: Sébastien Miquée Date: Wed, 17 Feb 2010 09:42:41 +0000 (+0100) Subject: Adding propagation of failed node replacement. X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/jaceP2P.git/commitdiff_plain/ebcd4d869020fccde984e99c713483be647ef250?hp=80ef4550f12b23bb3c35aff33e40761fa9a1f71d Adding propagation of failed node replacement. --- diff --git a/src/jaceP2P/JaceSuperNodeInterface.java b/src/jaceP2P/JaceSuperNodeInterface.java index 23cb489..4ae6445 100644 --- a/src/jaceP2P/JaceSuperNodeInterface.java +++ b/src/jaceP2P/JaceSuperNodeInterface.java @@ -53,6 +53,8 @@ public interface JaceSuperNodeInterface extends Remote { public boolean blockForMapping() throws RemoteException ; public void setMapping( Algo al ) throws RemoteException ; + + public void updateMappedNode(GNode dead, GNode remp); } /** ! **/ diff --git a/src/jaceP2P/JaceSuperNodeServer.java b/src/jaceP2P/JaceSuperNodeServer.java index 5648cd6..1963ff7 100644 --- a/src/jaceP2P/JaceSuperNodeServer.java +++ b/src/jaceP2P/JaceSuperNodeServer.java @@ -434,6 +434,10 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements delGNodeFromList( node ) ; + /** Updating all mapping **/ + updateMappedNode( gnode, remp ) ; + propagateReplaceNode( gnode, remp ) ; + authorized = false ; SuperNodeListe.Instance().forwardCountNode(); @@ -466,11 +470,45 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements 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 ) @@ -502,6 +540,7 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements if( ((Node)gnodes.get(i).getNode()).getId() == ((Node)_g.getNode()).getId() ) { gnodes.remove( i ) ; + Register.Instance().removeNodeOfName( _g.getName() ) ; break ; } } diff --git a/src/jaceP2P/SuperNodeListe.java b/src/jaceP2P/SuperNodeListe.java index 61add0a..82facfc 100644 --- a/src/jaceP2P/SuperNodeListe.java +++ b/src/jaceP2P/SuperNodeListe.java @@ -444,4 +444,28 @@ public class SuperNodeListe implements Cloneable { } } + 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() ) ; + } + } + } + } + } + }