Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Implementation of multiple mapping algorithm possibility.
[jaceP2P.git] / src / jaceP2P / JaceSpawner.java
index a6b1244..85014e0 100644 (file)
@@ -1,6 +1,7 @@
 package jaceP2P;
 
 import java.rmi.Naming;
+import java.rmi.RemoteException;
 import java.util.Calendar;
 import java.util.GregorianCalendar;
 import java.util.Vector;
@@ -38,6 +39,7 @@ public class JaceSpawner {
        // Variables for Mapping
        private int algo;
        private double paramAlgo ;
+       private String idAlgo ;
 
        public JaceSpawner(String superNode, int port, String comProtocol,
                        String[] args, int nbDaemonPerSpawner, int nbDaemonPerThread,
@@ -262,7 +264,7 @@ public class JaceSpawner {
                }
                // /System.out.println("is running = false");
                if (!JaceDaemon.Instance().isRunning())
-                       System.exit(0);
+                       System.exit( 1 ) ;
        }
 
        public synchronized void signalDeadNode(JaceInterface host, int rankOfDead) {
@@ -641,6 +643,7 @@ public class JaceSpawner {
                                ListeTask t = Register.Instance().getListeOfTasks();
                                ScanThreadSpawner.Instance().kill();
                                HeartBeatSpawner.Instance().kill();
+                               
                                for (int i = 0; i < s + 1; i++) {
 
                                        new KillThread(i, debut, nbOfDaemonsPerSpawner,
@@ -657,6 +660,7 @@ public class JaceSpawner {
 
                                int nbsdc = RunningApplication.Instance()
                                                .getNumberOfSpawnerDisconnections();
+                               
                                System.out.println("Application finished successfully !");
 //                             System.out.println("Application finished successfully !!!!!!");
 //                             System.out.println("Application finished successfully !!!!!!");
@@ -679,10 +683,12 @@ public class JaceSpawner {
                                        RunningApplication.Instance().purge();
                                        // System.exit(1);
                                }
+                               
+                               /** Suprresion of the mapping algorithm on the SuperNode **/
+                               centralServer.removeAlgo( idAlgo, 0 ) ;
                        }
-               } catch (Exception e) {
-                       System.out
-                                       .println("w aiiiiiiiiiiiiiirrrr" + e + "  index=" + index);
+               } catch( Exception e ) {
+                       System.err.println( "Error the application nodes scan!\n " + e ) ;
                        z = index;
                }
                /*
@@ -831,7 +837,7 @@ public class JaceSpawner {
                                        .println("JaceP2P_Error in JaceSpawner.exportObject() when creating the local JaceSpawnerServer "
                                                        + e);
 //                     System.err.println("exit ds JaceSpawner.exportObject");
-                       System.exit(0);
+                       System.exit( 1 ) ;
                }
 
        }
@@ -938,6 +944,9 @@ public class JaceSpawner {
                                connectSuperNode();
                        }
                }
+               
+               idAlgo = LocalHost.Instance().getIP() ;
+               
                if (registerSpawner.getSize() != (nbTasks + nbExtraSpawners)) {
                        System.err.println("I did not recieve enough nodes from superNode!!!! \n killing application !!!!");
                        for (int i = 0; i < registerSpawner.getSize(); i++) {
@@ -947,7 +956,7 @@ public class JaceSpawner {
                                        System.err.println("The reserved node was unable to reconnect to the super node");
                                }
                        }
-                       System.exit(0);
+                       System.exit( 1 ) ;
                }
 
                spawnersList = new Vector<Object>();
@@ -988,6 +997,18 @@ public class JaceSpawner {
                        System.exit(0);
                }
        }
+       
+       
+       /**
+        * Set the identifier of the mapping algorithm used.
+        * @param _s The mapping identifier
+        * 
+        * @author S&eacute;bastien Miqu&eacute;e
+        */
+       public void setIdAlgo( String _s ) throws RemoteException
+       {
+               idAlgo = _s ;
+       }
 
        public class TransformThread extends Thread {
                int i;
@@ -1083,11 +1104,21 @@ public class JaceSpawner {
                        System.out.println("waiting till transform of spawner " + j
                                        + " is finished");
                        while ((spawnersList.elementAt(j) instanceof Node))
+                       {
                                try {
 
                                        Thread.sleep(20);
                                } catch (Exception e) {
                                }
+                       }
+                       
+                       try {
+                               ((JaceSpawnerInterface)spawnersList.elementAt( i )).setIdAlgo( idAlgo ) ;
+                       } catch (RemoteException e) {
+                               System.err.println( "Unable to set Mapping Algorithm identifier" ) ;
+                               e.printStackTrace();
+                       }
+                               
                }
 
                System.out.println("End Transformation of all spawners. Beginning the computing processes");