Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
MSG_process_sleep should intercept HostFailureException and report it accordingly
authorMartin Quinson <martin.quinson@loria.fr>
Sun, 26 Aug 2018 20:50:16 +0000 (22:50 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Sun, 26 Aug 2018 22:44:20 +0000 (00:44 +0200)
Don't ask me how it could have worked before, but they were a
C++ try/catch in teshsuite/msg/host_on_off_processes. In a MSG code!!

src/msg/msg_gos.cpp
teshsuite/msg/host_on_off_processes/host_on_off_processes.cpp
teshsuite/msg/host_on_off_processes/host_on_off_processes.tesh

index 65b7809..97781b9 100644 (file)
@@ -114,8 +114,9 @@ msg_error_t MSG_process_sleep(double nb_sec)
 
   try {
     simgrid::s4u::this_actor::sleep_for(nb_sec);
-  }
-  catch(xbt_ex& e) {
+  } catch (simgrid::HostFailureException& e) {
+    status = MSG_HOST_FAILURE;
+  } catch (xbt_ex& e) {
     if (e.category == cancel_error) {
       XBT_DEBUG("According to the JAVA API, a sleep call should only deal with HostFailureException, I'm lost.");
       // adsein: MSG_TASK_CANCELED is assigned when someone kills the process that made the sleep, this is not
index 122a39a..669bd11 100644 (file)
@@ -43,7 +43,11 @@ static int process_sleep(int /*argc*/, char** /*argv*/)
 {
   for (;;) {
     XBT_INFO("  I'm alive but I should sleep");
-    MSG_process_sleep(10);
+    int res = MSG_process_sleep(10);
+    if (res == MSG_HOST_FAILURE) {
+      XBT_INFO("Host as died as expected, do nothing else");
+      return 0;
+    }
   }
   XBT_INFO("  I'm done. See you!");
   return 0;
@@ -56,9 +60,8 @@ static int commTX(int /*argc*/, char** /*argv*/)
   msg_task_t task = MSG_task_create("COMM", 0, 100000000, NULL);
   MSG_task_dsend(task, mailbox, task_cleanup_handler);
   // We should wait a bit (if not the process will end before the communication, hence an exception on the other side).
-  try {
-    MSG_process_sleep(30);
-  } catch (simgrid::HostFailureException& e) {
+  int res = MSG_process_sleep(30);
+  if (res == MSG_HOST_FAILURE) {
     XBT_INFO("The host has died ... as expected.");
   }
   XBT_INFO("  TX done");
index f89a77e..695428a 100644 (file)
@@ -8,7 +8,8 @@ $ ${bindir}/host_on_off_processes ${platfdir}/small_platform.xml 1 --log=no_loc
 > [Jupiter:process_daemon:(2) 2.000000] [msg_test/INFO]   Execute daemon
 > [Tremblay:test_launcher:(1) 3.000000] [msg_test/INFO]   Turn off Jupiter
 > [Jupiter:process_daemon:(2) 3.000000] [msg_test/INFO]   Execute daemon
-> [Tremblay:test_launcher:(1) 13.000000] [msg_test/INFO] Test 1 seems ok, cool !(#Processes: 1, it should be 1; #tasks: 3)
+> [Jupiter:process_daemon:(2) 3.000000] [msg_test/INFO] Host as died as expected, do nothing else
+> [Tremblay:test_launcher:(1) 13.000000] [msg_test/INFO] Test 1 seems ok, cool !(#Processes: 1, it should be 1; #tasks: 4)
 > [Tremblay:test_launcher:(1) 13.000000] [msg_test/INFO]   Test done. See you!
 > [13.000000] [msg_test/INFO] Simulation time 13
 
@@ -39,6 +40,7 @@ $ ${bindir}/host_on_off_processes ${platfdir}/small_platform.xml 3 --log=no_loc
 > [Tremblay:test_launcher:(1) 100.000000] [msg_test/INFO]   Turn off
 > [Jupiter:process_sleep:(2) 100.000000] [msg_test/INFO]   I'm alive but I should sleep
 > [Tremblay:test_launcher:(1) 100.000000] [msg_test/INFO]   sleep for 10 seconds
+> [Jupiter:process_sleep:(2) 100.000000] [msg_test/INFO] Host as died as expected, do nothing else
 > [Tremblay:test_launcher:(1) 10100.000000] [msg_test/INFO] number of Process : 1 it should be 1 (i.e. the Test one))
 > [Tremblay:test_launcher:(1) 10100.000000] [msg_test/INFO]   Test done. See you!
 > [10100.000000] [msg_test/INFO] Simulation time 10100