Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
New stable version with the add of the Maheve algorithm.
[mapping.git] / src / and / Mapping / Cluster.java
index 4d59d3d..712f17c 100644 (file)
@@ -14,12 +14,11 @@ public class Cluster implements Serializable
 {
        private static final long serialVersionUID = 1L;
        
-//     private int nb_node ;
        private String name ;
        private ArrayList<GNode> nodes ;
        private ArrayList<GNode> freenodes ;
        private String site ;
-//     private int indice ;
+       private int moreNode ;
        
        
        /**
@@ -27,56 +26,14 @@ public class Cluster implements Serializable
         */
        public Cluster()
        {
-//             nb_node = 0 ;
                name = "" ;
                nodes = new ArrayList<GNode>() ;
                freenodes = new ArrayList<GNode>() ;
                site = "" ;
-//             indice = 0 ;
+               moreNode = 0 ;
        }
        
        
-//     /**
-//      * Constructor.
-//      * @param _nb The amount of computing nodes in the cluster
-//      */
-//     public Cluster( int _nb )
-//     {
-//             nb_node = _nb ;
-//             name = "" ;
-//             nodes = new ArrayList<GNode>() ;
-//             freenodes = new ArrayList<GNode>() ;
-//             site = "" ;
-////           indice = 0 ;
-//             
-//             
-//             for( int i = 0 ; i < nb_node ; i++ )
-//             {
-//                     nodes.add( new GNode() ) ;
-//             }
-//     }
-       
-       
-//     /**
-//      * Constructor.
-//      * @param _nb The amount of computing nodes in the cluster
-//      * @param _name Cluster's name
-//      */
-//     public Cluster( int _nb, String _name )
-//     {
-////           nb_node = _nb ;
-//             name = _name ;
-//             nodes = new ArrayList<GNode>() ;
-//             site = "" ;
-////           indice = 0 ;
-//             
-//             for( int i = 0 ; i < nb_node ; i++ )
-//             {
-//                     nodes.add( new GNode() ) ;
-//             }
-//     }
-       
-       
        /**
         * Set the name of the cluster.
         * @param _name Cluster's name
@@ -98,8 +55,6 @@ public class Cluster implements Serializable
                        _n.setInCluster( true ) ;
                        nodes.add( _n ) ;
 
-//                     nb_node++ ;
-               
                        if( ! _n.getMapped() )
                        {
                                freenodes.add( _n ) ;
@@ -134,7 +89,6 @@ public class Cluster implements Serializable
         */
        public int getNbGNode()
        {
-//             return nb_node ;
                return nodes.size() ;
        }
        
@@ -184,29 +138,14 @@ public class Cluster implements Serializable
                return pos ;
        }
        
-//     /**
-//      * Initialization of indice variable.
-//      */
-//     public void initIndice()
-//     {
-//             indice = 0 ;
-//     }
-
-
        /**
-        * Return the next computing node in the cluster,
-        * according to the indice variable.
+        * Return the next available computing node in the cluster.
         * @return The next node in the cluster
         */
        public GNode nextGNode() 
        {
                GNode ret = null ;
                
-//             if( indice < nb_node )
-//             {
-//                     ret = nodes.get( indice ) ;
-//                     indice++ ;
-//             }
                if( freenodes.size() > 0 )
                {
                        ret = freenodes.get( 0 ) ;
@@ -214,6 +153,30 @@ public class Cluster implements Serializable
                
                return ret ;
        }
+       
+       
+       /**
+        * Return the next available computing node in the cluster,
+        * according to the moreNode iterator.
+        * @return The next node in the cluster
+        */
+       public GNode moreGNode()
+       {
+               GNode ret = null ;
+               
+               if( freenodes.size() > 0 )
+               {
+                       if( moreNode >= freenodes.size() )
+                       {
+                               moreNode = 0 ;
+                       }
+                       
+                       ret = freenodes.get( moreNode ) ;
+                       moreNode++ ;
+               }
+               
+               return ret ;
+       }
 
 
        /**
@@ -222,18 +185,40 @@ public class Cluster implements Serializable
         */
        public void removeGNode( GNode _dead ) 
        {
-               if( _dead != null && _dead.getCluster().equals( name ) && _dead.getSite().equals( site )  )
+               if( _dead != null )
                {
-                       for( int i = 0 ; i < nodes.size() ; i++ )
+                       if( _dead.getCluster().equals( name ) && _dead.getSite().equals( site )  )
                        {
-                               if( _dead.getId() == nodes.get( i ).getId() )
+                               int i = 0 ;
+                               for( i = 0 ; i < nodes.size() ; i++ )
                                {
-                                       freenodes.remove( nodes.remove( i ) ) ;
-//                                     nb_node-- ;
-                                       
-                                       break ;
+                                       if( _dead.getId() == nodes.get( i ).getId() )
+                                       {
+                                               nodes.remove( i ) ;
+
+                                               int j = 0 ;
+                                               for( j = 0 ; j < freenodes.size() ; j++ )
+                                               {
+                                                       if( freenodes.get(j).getId() == _dead.getId() )
+                                                       {
+                                                               freenodes.remove( j ) ;
+                                                               break ;
+                                                       }
+                                               }
+
+                                               break ;
+                                       }
                                }
+                               
+                               if( i > nodes.size() )
+                               {
+                                       System.err.println( "(Cluster) The GNode was not found in the list!" );
+                               }
+                       } else {
+                               System.err.println( "(Cluster) The GNode to be deleted is not mine!" ) ;
                        }
+               } else {
+                       System.err.println( "(Cluster) The GNode to be deleted is null!" ) ;
                }
        }
        
@@ -255,7 +240,15 @@ public class Cluster implements Serializable
                                        
                                        if( _status ) 
                                        {
-                                               freenodes.remove( nodes.get(i) ) ;
+                                               for( int j = 0 ; j < freenodes.size() ; j++ )
+                                               {
+                                                       if( freenodes.get(j).getId() == nodes.get(i).getId() )
+                                                       {
+                                                               freenodes.remove( j ) ;
+                                                               break ;
+                                                       }
+                                               }
+
                                        } else {
                                                if( ! freenodes.contains( nodes.get( i ) ) )
                                                        freenodes.add( nodes.get( i ) ) ;
@@ -279,29 +272,19 @@ public class Cluster implements Serializable
        /**
         * Compute and return the real available computing power of the cluster,
         * including the heterogeneity degree of the platform. 
-        * @param _het The heterogeneity degree of the platform
         * @return The real available computing power
         */
-       public double getAvailablePower( double _het )
+       public double getAvailablePower()
        {
                double ret = 0 ;
                
                /** If there is some available nodes **/
                if( freenodes.size() > 0 )
-               {
-                       double het = _het ;
-                       double totalPower = 0 ;
-                       
-                       if( het == 0 )
-                               het = 0.00001 ;
-                       
+               {                                               
                        for( int i = 0 ; i < freenodes.size() ; i++ )
                        {
-                               totalPower += freenodes.get( i ).getPower() ;
+                               ret += freenodes.get( i ).getPower() ;
                        }
-                       
-                       ret = Math.pow( ( totalPower / freenodes.size() ), ( 2 * het) ) *
-                             ( freenodes.size() / ( het * het) ) ;
                }
                
                return ret ;