X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/jaceP2P.git/blobdiff_plain/9e956705309c9875a2550b863127892b1a52723c..4fafa3d59cda94e7077ffc000a6d8ada04c922a5:/src/jaceP2P/JaceSuperNodeServer.java diff --git a/src/jaceP2P/JaceSuperNodeServer.java b/src/jaceP2P/JaceSuperNodeServer.java index c954257..d2f5786 100644 --- a/src/jaceP2P/JaceSuperNodeServer.java +++ b/src/jaceP2P/JaceSuperNodeServer.java @@ -12,7 +12,6 @@ import and.Mapping.GTask; import and.Mapping.Graph; import and.Mapping.Grid; import and.Mapping.LSM; -import and.Mapping.Mapping; import and.Mapping.QM; import and.Mapping.Simple; import and.Mapping.Utils; @@ -77,7 +76,7 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements .setNbOfNodes(Register.Instance().getSize()); new ForwardCount().start(); } catch (Exception e) { - System.out.println("Error changing Server in SendSurplus : " + System.err.println("Error changing Server in SendSurplus : " + e); } } @@ -99,7 +98,7 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements System.out.println("Put token to true"); } catch (Exception e) { - System.out + System.err .println("Unable to heartBeat the next SuperNode with the new Token : " + e); } @@ -123,7 +122,7 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements public synchronized void workerRegistering(JaceInterface workerStub, String workerIP, String workerName, int port, GNode g) throws RemoteException { - System.out.println("CONNEXION of " + workerName); + System.out.println("CONNECTION of " + workerName); // Create the node Node noeud = new Node(workerStub); @@ -137,12 +136,13 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements noeud.setId( count ) ; noeud.setId( Long.parseLong( workerIP.replace( ".", "" ) ) ) ; - g.setNode(noeud); + g.setNode( noeud ) ; g.setId( noeud.getId() ) ; + g.setMapped( false ) ; workingOnGnodes() ; - gnodes.add(g); + gnodes.add( g ) ; // daemonListChange = true ; @@ -200,6 +200,22 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements /** Mapping !! Sébastien Miquée **/ /*********************************/ + /** + * Search and return to the requester spawner a register containing + * computation nodes plus some extra nodes if needed. This method requires + * as parameters the mapping algorithm choice and its parameters, and the + * amount of requested nodes and the task to be used, in order to + * construct the tasks graph. + * @param spawnerIP IP of the requester + * @param nbTasks Amount of tasks + * @param t Tasks to be executed + * @param nbNoeuds Total amount of requested nodes + * @param algo Identifier of the mapping algorithm + * @param paramAlgo Parameter of the mapping algorithm + * + * @author Sébastien Miquée + */ + @Override public Register getRegisterSpawner(String spawnerIP, int nbTasks, Task t, int nbNoeuds, int algo, double paramAlgo) throws RemoteException { @@ -223,7 +239,7 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements /** Initialization of Grid architecture (G5K for now) **/ Grid grid = Utils.createGridG5k(gnodes); - grid.initClusters(); +// grid.initClusters(); /** Creation of tasks GTask **/ @@ -290,18 +306,14 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements al.map(); - /** Transforming mapping in register **/ - Mapping mp = al.getMapping(); - - /** Creating the register **/ - ArrayList ag = mp.getMappedGNodes(); + ArrayList ag = al.getMapping().getMappedGNodes(); authorized = true ; - for (int i = 0; i < ag.size(); i++) { + for( int i = 0; i < ag.size(); i++ ) { reg.addNode((Node) ag.get(i).getNode()); - delGNodeFromList( (Node) ag.get(i).getNode(), 0 ) ; + delGNodeFromList( (Node) ag.get(i).getNode(), 2 ) ; // gnodes.remove(ag.get(i)); // Register.Instance().removeNode((Node) ag.get(i).getNode()); } @@ -317,7 +329,7 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements { sup = al.getOtherGNode( gnodes ) ; reg.addNodeBeg( (Node) sup.getNode() ) ; - delGNodeFromList( (Node) sup.getNode(), 0 ) ; + delGNodeFromList( (Node) sup.getNode(), 2 ) ; } } @@ -329,26 +341,30 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements } -// daemonListChange = false ; - - System.out.println( "Spawner returned reg: " + reg ) ; +// System.out.println( "Spawner returned reg: " + reg ) ; - /** Mapping distribution over other Super Nodes */ + /** Mapping distribution over other SuperNodes */ SuperNodeListe.Instance().setMapping( al ) ; operating = false ; - /* Returning result */ + /** Returning result **/ return reg ; } - /*****************************************/ - /**** Sébastien Miquée ****/ - /** **/ - /** Recherche nouveau noeud **/ - /*****************************************/ - protected GNode delGNodeFromList( Node _n, int _mode ) + /** + * Suppress a node from the gnodes list if this node is free, or remove + * it from the Mapping class of the mapping algorithm if this node is + * a computation node. After having done the local suppression of the node + * it propagates the suppression to other SuperNodes. + * @param _n The fallen node + * @param _mode Choice of the list (0: gnodes, 1: mapping, 2:just mapped) + * + * @author Sébastien Miquée + */ + @Override + public GNode delGNodeFromList( Node _n, int _mode ) throws RemoteException { GNode removedGNode = null ; @@ -363,7 +379,7 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements } /** The dead node is not in the mapping **/ - if( _mode == 0 ) + if( _mode == 0 || _mode == 2) { for( int i = 0 ; i < gnodes.size() ; i++ ) { @@ -392,10 +408,13 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements } } - -// daemonListChange = true ; - - SuperNodeListe.Instance().removeGNode( removedGNode ) ; + /** Removing the dead node from the Grid **/ + if( _mode == 0 || _mode == 1 ) { + al.getGrid().removeGNode( removedGNode ) ; + } + + /** Propagation of the deletion **/ + SuperNodeListe.Instance().removeGNode( removedGNode, _mode ) ; if( free ) { @@ -408,6 +427,13 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements } + /** + * Determine if this SuperNode can operate on the gnodes list. + * It asks other SuperNodes to know if their are working on this list + * and set the authorization, or not. + * + * @author Sébastien Miquée + */ private void workingOnGnodes() { boolean tmp = true ; @@ -439,7 +465,16 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements inDemand = false ; } - + /** + * Search and return a new node when one failed or when JaceP2P needs another + * one. For the first case, the given failed node should not be null, and + * null in the other case. + * @param _spawnerIP IP of the requester + * @param _deadNode The failed node + * + * @author Sébastien Miquée + */ + @Override public Node getNewNode( String _spawnerIP, Node _deadNode ) throws RemoteException { Node node = null ; @@ -459,13 +494,10 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements if( remp != null ) { System.out.println( "Replacing node found." ) ; - node = (Node) remp.getNode() ; - delGNodeFromList( node, 0 ) ; + remp.setMapped( true ) ; - /** Updating all mapping **/ - updateMappedNode( gnode, remp ) ; - propagateReplaceNode( gnode, remp ) ; + delGNodeFromList( (Node) remp.getNode(), 2 ) ; authorized = false ; @@ -479,11 +511,12 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements if( remp != null ) { System.out.println( "Other new node found." ) ; - node = (Node) remp.getNode() ; + + remp.setMapped( true ) ; authorized = true ; - delGNodeFromList( node, 0 ) ; + delGNodeFromList( (Node) remp.getNode(), 2 ) ; authorized = false ; @@ -493,38 +526,64 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements } } + + /** Updating all mapping **/ + updateMappedNode( gnode, remp ) ; + propagateReplaceNode( gnode, remp ) ; + + /** Free the gnodes use **/ operating = false ; return node ; } + + /** + * Replace a failed GNode in the mapping by another one. + * This method is called by the SuperNodeList, to broadcast the modification. + * @param _dead The failed node + * @param _remp The replacing node + * + * @author Sébastien Miquée + */ @Override public void updateMappedNode( GNode _dead, GNode _remp ) { - int pos = 0 ; - pos = al.getMapping().getIdOfAssociation( _dead ) ; - - if( pos == -1 ) + if( _remp != null ) { - System.err.println( "GNode "+_dead+" does not exist in the mapping!" ) ; - return ; - } + int pos = 0 ; - al.getMapping().getMapping().get( pos ).setGNode( _remp ) ; - - System.out.println( "Succesfully replacing the fallen node in the mapping." ) ; + pos = al.getMapping().getIdOfAssociation( _dead ) ; + + if( pos != -1 ) + { + /** Changing the node in the mapping **/ + al.getMapping().getMapping().get( pos ).setGNode( _remp ) ; + + System.out.println( "Succesfully replacing the fallen node in the mapping." ) ; + } + + /** Changing the status in the grid **/ + al.getGrid().setMappedStatus( _remp, true ) ; + + al.updateGrid() ; + } else { + System.err.println( "The new GNode is null!" ) ; + } } /** - * Inform all SuperNodes of the replacement of a fallen computing node. - * @param _dead The fallen node + * Inform all SuperNodes of the replacement of a failed computing node. + * @param _dead The failed node * @param _remp The replacing node + * + * @author Sébastien Miquée */ private void propagateReplaceNode( GNode _dead, GNode _remp ) throws RemoteException { - if( _dead != null && _remp != null ) + if( _remp != null ) { SuperNodeListe.Instance().propagateReplaceNode( _dead, _remp ) ; } @@ -533,10 +592,13 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements /**********************************************************/ /**********************************************************/ + @Override /** * Add a new node in the list. * @param _g The new node + * + * @author Sébastien Miquée */ public void addGNode( GNode _g ) throws RemoteException { @@ -558,36 +620,42 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements } - @Override - public void removeGNode( GNode _g ) throws RemoteException - { - if( _g != null ) - { - boolean free = false ; - - if( ! operating ) - { - workingOnGnodes() ; - free = true ; - } - - for( int i = 0 ; i < gnodes.size() ; i++ ) - { - if( ((Node)gnodes.get(i).getNode()).getId() == ((Node)_g.getNode()).getId() ) - { - gnodes.remove( i ) ; - Register.Instance().removeNodeOfName( _g.getName() ) ; - break ; - } - } - - if( free ) - operating = false ; - } - - } +// @Override +// public void removeGNode( GNode _g ) throws RemoteException +// { +// if( _g != null ) +// { +// boolean free = false ; +// +// if( ! operating ) +// { +// workingOnGnodes() ; +// free = true ; +// } +// +// for( int i = 0 ; i < gnodes.size() ; i++ ) +// { +// if( ((Node)gnodes.get(i).getNode()).getId() == ((Node)_g.getNode()).getId() ) +// { +// gnodes.remove( i ) ; +// Register.Instance().removeNodeOfName( _g.getName() ) ; +// break ; +// } +// } +// +// if( free ) +// operating = false ; +// } +// +// } + /** + * Set the local mapping with another done on an other SuperNode. + * @param _al The new mapping + * + * @author Sébastien Miquée + */ @Override public void setMapping( Algo _al ) throws RemoteException { @@ -599,8 +667,9 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements /** * Allow or deny the use of operations on the gnodes list, in order to * do a mapping operation. - * @author miquee * @return The authorization or not to block gnodes + * + * @author Sébastien Miquée */ public boolean blockForMapping() throws RemoteException { @@ -621,6 +690,12 @@ public class JaceSuperNodeServer extends UnicastRemoteObject implements } } + /** + * Return the array containing the current not mapped nodes available. + * @return The array of available nodes + * + * @author Sébastien Miquée + */ @Override public ArrayList getGNodes() throws RemoteException {