Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
New development version.
[jaceP2P.git] / src / jaceP2P / UpdateRegisterConcernedThread.java
index fc5f6f4..a95f0a7 100644 (file)
@@ -7,11 +7,13 @@ class UpdateRegisterConcernedThread extends Thread {
        int requete;
        int i, rank;
        Task tache = null;
-       Vector<?> neighbors;
+       @SuppressWarnings("unchecked")
+       Vector neighbors;
        int nbOfDeamonsPerThread;
        Node oldNode, node;
 
-       public UpdateRegisterConcernedThread(Vector<?> neighbors, Register r, int i,
+       @SuppressWarnings("unchecked")
+       public UpdateRegisterConcernedThread(Vector neighbors, Register r, int i,
                        int rank, Node noeud, Node tmpNode) {
 
                this.reg = r;
@@ -26,115 +28,177 @@ class UpdateRegisterConcernedThread extends Thread {
 
        public void run() {
                ListeTask listOfTasks = Register.Instance().getListeOfTasks().clone();
+//             boolean retry = false ;
+//             int nbRetry = 0 ;
+//             int nbRetryMax = 2 ;
+
+               String name = "" ;
+
                // listOfTasks.viewAll();
                for (int index = i * nbOfDeamonsPerThread; index < i
-                               * nbOfDeamonsPerThread + nbOfDeamonsPerThread
-                               && index < neighbors.size(); index++) {
+               * nbOfDeamonsPerThread + nbOfDeamonsPerThread
+               && index < neighbors.size(); index++) 
+               {
 
-                       try {
-                               if (((Integer) neighbors.elementAt(index)).intValue() == rank) {
-                                       Register g = new Register();
-                                       ListeTask newListOfTasks = new ListeTask();
-                                       g.setAppliName(reg.getAppliName());
-                                       g.setParams(reg.getParams());
+//                     retry = true ;
+//                     nbRetry = 0 ;
 
-                                       g.setSpawnerStub(JaceSpawner.Instance()
-                                                       .getSpawnerResponsibleOn(rank));
-                                       g.setNbOfTasks(reg.getNbOfTasks());
-
-                                       for (int j = 0; j < neighbors.size(); j++) {
-                                               TaskId id = listOfTasks
-                                                               .getTaskIdOfRank(((Integer) neighbors
-                                                                               .elementAt(j)).intValue());
-                                               newListOfTasks.addTask(id);
-                                               if (id.getHostStub() != null) {
-                                                       Node noeud = reg.getNodeOfStub(id.getHostStub());
-                                                       Node n2 = noeud;
-
-                                                       g.addNode(n2);
-                                               }
-                                       }
-                                       g.setListeOfTasks(newListOfTasks);
-
-                                       TaskId neighborTask = listOfTasks
-                                                       .getTaskIdOfRank((((Integer) neighbors
-                                                                       .elementAt(index)).intValue() + 1)
-                                                                       % listOfTasks.getSize());
-                                       JaceInterface stubVoisin = neighborTask.getHostStub();
-                                       JaceInterface stub = listOfTasks.getTaskIdOfRank(
-                                                       ((Integer) neighbors.elementAt(index)).intValue())
-                                                       .getHostStub();
-                                       if (stub == null || stubVoisin == null) {
-                                               System.out.println("stub NULL");
-                                       } else {
+//                     while( retry )
+//                     {
+                               try {
+                                       if (((Integer) neighbors.elementAt(index)).intValue() == rank) {
+                                               Register g = new Register();
+                                               ListeTask newListOfTasks = new ListeTask();
+                                               g.setAppliName(reg.getAppliName());
+                                               g.setParams(reg.getParams());
 
-                                               String name = listOfTasks.getTaskIdOfRank(
-                                                               ((Integer) neighbors.elementAt(index))
-                                                                               .intValue()).getHostName();
+                                               g.setSpawnerStub(JaceSpawner.Instance()
+                                                               .getSpawnerResponsibleOn(rank));
+                                               g.setNbOfTasks(reg.getNbOfTasks());
 
-                                               try {
-                                                       // whatever the case, uate the Register on each Node
+                                               for (int j = 0; j < neighbors.size(); j++) {
+                                                       TaskId id = listOfTasks
+                                                       .getTaskIdOfRank(((Integer) neighbors
+                                                                       .elementAt(j)).intValue()) ;
+                                                       newListOfTasks.addTask( id ) ;
+                                                       if( id.getHostStub() != null ) {
+                                                               Node noeud = reg.getNodeOfStub( id.getHostStub() ) ;
+//                                                             Node n2 = noeud ;
+                                                               if( noeud != null )
+                                                               {
+                                                                       g.addNode( noeud ) ;
+                                                               } else {
+                                                                       noeud = reg.getNodeOfName( id.getHostName() ) ;
+                                                                       
+                                                                       if( noeud != null )
+                                                                       {
+                                                                               g.addNode( noeud ) ;
+                                                                       } else {
+                                                                               System.err.println( "UpdateRegisterConcernedThread: cannot found the corresponding node !" ) ;
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+                                               
+                                               g.setListeOfTasks(newListOfTasks);
 
-                                                       // JaceSpawnerInterface
-                                                       // ja=Register.Instance().getSpawnerStub();
-                                                       // System.out.println("avant update register");
+                                               TaskId neighborTask = listOfTasks
+                                               .getTaskIdOfRank((((Integer) neighbors
+                                                               .elementAt(index)).intValue() + 1)
+                                                               % listOfTasks.getSize());
+                                               JaceInterface stubVoisin = neighborTask.getHostStub();
+                                               JaceInterface stub = listOfTasks.getTaskIdOfRank(
+                                                               ((Integer) neighbors.elementAt(index)).intValue())
+                                                               .getHostStub();
+                                               if( stub == null || stubVoisin == null ) 
+                                               {
+                                                       System.out.println("stub NULL");
+                                               } else {
+                                                       name = listOfTasks.getTaskIdOfRank(
+                                                                       ((Integer) neighbors.elementAt(index))
+                                                                       .intValue()).getHostName();
 
-                                                       // 0 l'applejaacoja commence
-                                                       stub.updateRegister(g, stubVoisin, 0);
+                                                       Node noeud = null ;
+                                                       
+                                                       try {
+                                                               // whatever the case, update the Register on each Node
 
-                                                       // System.out.println(" after update register");
-                                                       // if updateRegister worked, that means Node is
-                                                       // Alive
-                                                       Node noeud = Register.Instance()
-                                                                       .getNodeOfStub(stub);
-                                                       if (noeud != null) {
-                                                               noeud.setAliveFlag(true);
-                                                               noeud.setAliveTime();
+                                                               // JaceSpawnerInterface
+                                                               // ja=Register.Instance().getSpawnerStub();
+                                                               // System.out.println("avant update register");
 
-                                                       }
-                                               } catch (Exception e) {
-                                                       System.out
-                                                                       .println(name
-                                                                                       + " ("
-                                                                                       + LocalHost.Instance()
-                                                                                                       .resolve(name)
-                                                                                       + " rank="
-                                                                                       + index
-                                                                                       + ") cannot be reached by UpdateRegisterConcernedThread   for new node "
-                                                                                       + "     size : "
-                                                                                       + Register.Instance().getSize()
-                                                                                       + " :" + e);
+                                                               stub.updateRegister( g, stubVoisin, 0 ) ;
 
-                                               }
-                                       }
-                               } else {
-                                       //int tag;
-                                       TaskId id = listOfTasks
-                                                       .getTaskIdOfRank(((Integer) neighbors
-                                                                       .elementAt(index)).intValue());
-                                       String name = id.getHostName();
+                                                               // System.out.println(" after update register");
+                                                               // if updateRegister worked, that means Node is
+                                                               // Alive
+                                                               noeud = Register.Instance()
+                                                               .getNodeOfStub(stub);
+                                                               if (noeud != null) {
+                                                                       noeud.setAliveFlag(true);
+                                                                       noeud.setAliveTime();
 
-                                       try {
-
-                                               JaceInterface stub = id.getHostStub();
-                                               stub.updateRegister(oldNode, node);
-                                       } catch (Exception e) {
-                                               System.out
+                                                               }
+//                                                             retry = false ;
+                                                       } catch( Exception e ) {
+                                                               System.err
                                                                .println(name
                                                                                + " ("
-                                                                               + LocalHost.Instance().resolve(name)
+                                                                               + LocalHost.Instance()
+                                                                               .resolve(name)
                                                                                + " rank="
                                                                                + index
-                                                                               + ") cannot be reached by UpdateRegisterConcernedThread   "
+                                                                               + ") cannot be reached by UpdateRegisterConcernedThread for new node "
                                                                                + "     size : "
-                                                                               + Register.Instance().getSize() + " :"
-                                                                               + e);
+                                                                               + Register.Instance().getSize()
+                                                                               + " :" + e);
+//                                                             try{
+//                                                                     Thread.sleep( (nbRetry + 1) * 2000 ) ;
+//                                                             }catch(Exception sl){}
+//                                                             nbRetry++ ;
+
+//                                                             if( nbRetry > nbRetryMax )
+//                                                             {
+//                                                                     retry = false ;
+//                                                                     System.err.println( "Cannot retry anymore!" ) ;
+//                                                                     if( noeud != null )
+//                                                                     {
+//                                                                             try {
+//                                                                                     JaceSpawner.Instance().signalDeadNode( noeud.getStub(), index ) ;
+//                                                                             } catch( Exception ex ) {
+//                                                                                     JaceSpawner.Instance().signalDeadNode( null, index ) ;
+//                                                                             }
+//                                                                     } else {
+//                                                                             JaceSpawner.Instance().signalDeadNode( null, index ) ;
+//                                                                     }
+//                                                             }
+                                                       }
+                                               }
+                                       } else {
+                                               //int tag;
+                                               TaskId id = listOfTasks
+                                               .getTaskIdOfRank(((Integer) neighbors
+                                                               .elementAt(index)).intValue());
+                                               name = id.getHostName();
+
+                                               try {
+
+                                                       JaceInterface stub = id.getHostStub() ;
+                                                       stub.updateRegister( oldNode, node, rank ) ;
+//                                                     retry = false ;
+                                               } catch (Exception e) {
+                                                       System.err
+                                                       .println(name
+                                                                       + " ("
+                                                                       + LocalHost.Instance().resolve(name)
+                                                                       + " rank="
+                                                                       + index
+                                                                       + ") cannot be reached by UpdateRegisterConcernedThread size : "
+                                                                       + Register.Instance().getSize() + " :"
+                                                                       + e);
+
+//                                                     try{
+//                                                             Thread.sleep( (nbRetry + 1) * 2000 ) ;
+//                                                     }catch(Exception sl){}
+//                                                     nbRetry++ ;
+
+//                                                     if( nbRetry > nbRetryMax )
+//                                                     {
+//                                                             retry = false ;
+//                                                             System.err.println( "Cannot retry anymore!" ) ;
+//                                                     }
+                                               }
                                        }
+                               } catch( Exception e2 ) {
+                                       System.err.println("Error in updateRegisterConcernedThread :"
+                                                       + e2);
                                }
-                       } catch (Exception e2) {
-                               System.out.println("error in updateRegisterConcernedThread :"
-                                               + e2);
-                       }
+//                     }
+
+//                     if( nbRetry > nbRetryMax )
+//                     {
+//                             
+//                     }
                }
                // System.out.println("at the end of an updateRegisterCon. j="+i);
                // Register.Instance().getListeOfTasks().viewAll();