4 import java.io.Serializable;
5 import java.util.ArrayList;
9 * Class representing a computing nodes cluster
10 * @author Sébastien Miquée
13 public class Cluster implements Serializable
15 private static final long serialVersionUID = 1L;
18 private ArrayList<GNode> nodes ;
19 private ArrayList<GNode> freenodes ;
21 private int moreNode ;
25 * Default constructor.
30 nodes = new ArrayList<GNode>() ;
31 freenodes = new ArrayList<GNode>() ;
38 * Set the name of the cluster.
39 * @param _name Cluster's name
41 public void setName( String _name )
48 * Adding a computing node to the cluster.
49 * @param _n Node to be add
51 public void addGNode( GNode _n )
55 _n.setInCluster( true ) ;
58 if( ! _n.getMapped() )
67 * Return the list of computing nodes which are in the cluster.
68 * @return The list of nodes
70 public ArrayList<GNode> getGNodes()
77 * Return cluster's name.
78 * @return Cluster's name
80 public String getName()
87 * Return the amount of computing nodes in the cluster.
88 * @return The amount of nodes
90 public int getNbGNode()
97 * Set the site in which the cluster is.
98 * @param _site Site's name
100 public void setSite( String _site )
107 * Return the site's name in which the cluster is.
108 * @return The site's name
110 public String getSite()
117 * Test if a computing node is in the cluster.
118 * @param _g The node to be tested
119 * @return The position of the node
121 public int isIn( GNode _g )
127 for( int i = 0 ; i < nodes.size() ; i ++ )
129 if( nodes.get( i ).getId() == _g.getId() )
142 * Return the next available computing node in the cluster.
143 * @return The next node in the cluster
145 public GNode nextGNode()
149 if( freenodes.size() > 0 )
151 ret = freenodes.get( 0 ) ;
159 * Return the next available computing node in the cluster,
160 * according to the moreNode iterator.
161 * @return The next node in the cluster
163 public GNode moreGNode()
167 if( freenodes.size() > 0 )
169 if( moreNode >= freenodes.size() )
171 System.err.println( "No more free node available" );
173 ret = freenodes.get( moreNode ) ;
183 * (Re-)Initialize the moreNode counter.
185 public void initMoreGNode()
192 * Remove a failed node from the cluster.
193 * @param _dead The failed node
195 public void removeGNode( GNode _dead )
199 if( _dead.getCluster().equals( name ) && _dead.getSite().equals( site ) )
202 for( i = 0 ; i < nodes.size() ; i++ )
204 if( _dead.getId() == nodes.get( i ).getId() )
209 for( j = 0 ; j < freenodes.size() ; j++ )
211 if( freenodes.get(j).getId() == _dead.getId() )
213 freenodes.remove( j ) ;
222 if( i > nodes.size() )
224 System.err.println( "(Cluster) The GNode was not found in the list!" );
227 System.err.println( "(Cluster) The GNode to be deleted is not mine!" ) ;
230 System.err.println( "(Cluster) The GNode to be deleted is null!" ) ;
236 * Set the mapped status of a node of the cluster.
237 * @param _g The mapped node
238 * @param _status The status of the node
240 public void setGNodeStatus( GNode _g, boolean _status )
244 for( int i = 0 ; i < nodes.size() ; i++ )
246 if( nodes.get( i ).getId() == _g.getId() )
248 nodes.get( i ).setMapped( _status ) ;
252 for( int j = 0 ; j < freenodes.size() ; j++ )
254 if( freenodes.get(j).getId() == nodes.get(i).getId() )
256 freenodes.remove( j ) ;
262 if( ! freenodes.contains( nodes.get( i ) ) )
263 freenodes.add( nodes.get( i ) ) ;
272 * Return the amount of available free nodes in the cluster.
273 * @return The amount of free nodes
275 public int getNbFreeNodes()
277 return freenodes.size() ;
282 * Compute and return the available computing power of the cluster.
283 * @return The available computing power
285 public double getAvailablePower()
289 /** If there is some available nodes **/
290 if( freenodes.size() > 0 )
292 for( int i = 0 ; i < freenodes.size() ; i++ )
294 ret += freenodes.get( i ).getPower() ;
303 * Compute and return the average available computing power of the cluster.
304 * @return The available available computing power
306 public double getAvgAvailablePower()
310 /** If there is some available nodes **/
311 if( freenodes.size() > 0 )
313 for( int i = 0 ; i < freenodes.size() ; i++ )
315 ret += freenodes.get( i ).getPower() ;
318 ret = ret / freenodes.size() ;
325 public double getAvgPower()
329 /** If there is some available nodes **/
330 if( nodes.size() > 0 )
332 for( int i = 0 ; i < nodes.size() ; i++ )
334 ret += nodes.get( i ).getPower() ;
337 ret = ret / nodes.size() ;
344 public double getPower()
348 /** If there is some available nodes **/
349 if( nodes.size() > 0 )
351 for( int i = 0 ; i < nodes.size() ; i++ )
353 ret += nodes.get( i ).getPower() ;
361 * Initialization of computing nodes in this cluster. Set all
362 * of these nodes to be not mapped on.
364 public void initGNodes()
366 /** Initialization of local nodes **/
367 /** and reconstruction of the freenodes list **/
369 freenodes = new ArrayList<GNode>() ;
371 for( int i = 0 ; i < nodes.size() ; i++ )
373 nodes.get( i ).setMapped( false ) ;
375 freenodes.add( nodes.get( i ) ) ;
381 /** La programmation est un art, respectons ceux qui la pratiquent !! **/