From ebcd4d869020fccde984e99c713483be647ef250 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Miqu=C3=A9e?= Date: Wed, 17 Feb 2010 10:42:41 +0100 Subject: [PATCH 1/1] Adding propagation of failed node replacement. --- src/jaceP2P/JaceSuperNodeInterface.java | 2 ++ src/jaceP2P/JaceSuperNodeServer.java | 39 +++++++++++++++++++++++++ src/jaceP2P/SuperNodeListe.java | 24 +++++++++++++++ 3 files changed, 65 insertions(+) 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() ) ; + } + } + } + } + } + } -- 2.20.1