Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'odpor-implementation' into 'master'
[simgrid.git] / teshsuite / s4u / comm-fault-scenarios / comm-fault-scenarios.cpp
index 4066f4a..1723741 100644 (file)
@@ -159,21 +159,23 @@ class SendAgent {
     // Make sure we have a clean slate
     xbt_assert(not mbox_.eager->listen(), "Eager mailbox should be empty when starting a test");
     xbt_assert(not mbox_.rdv->listen(), "RDV mailbox should be empty when starting a test");
-    for (; step_index < s.steps.size(); step_index++) {
-      const Step& step = s.steps[step_index];
-      if (step.entity != Step::Entity::SND || step.type != Step::Type::ACTION)
-        continue;
-      try {
+
+    Action current_action;
+    try {
+      for (; step_index < s.steps.size(); step_index++) {
+        const Step& step = s.steps[step_index];
+        if (step.entity != Step::Entity::SND || step.type != Step::Type::ACTION)
+          continue;
+
+        current_action = Action::SLEEP;
         sg4::this_actor::sleep_until(s.start_time + step.rel_time);
-      } catch (const simgrid::Exception& e) {
-        XBT_DEBUG("During Sleep, failed to send message because of a %s exception (%s)", typeid(e).name(), e.what());
-        break;
-      }
-      // Check if the other host is still OK.
-      if (not other_host_->is_on())
-        break;
-      // Perform the action
-      try {
+
+        // Check if the other host is still OK.
+        if (not other_host_->is_on())
+          break;
+
+        // Perform the action
+        current_action = step.action_type;
         switch (step.action_type) {
           case Action::PUT:
             comm = do_put(s.type, send_value);
@@ -187,11 +189,10 @@ class SendAgent {
           default:
             xbt_die("Not a valid action for SND");
         }
-      } catch (const simgrid::Exception& e) {
-        XBT_DEBUG("During %s, failed to send message because of a %s exception (%s)", to_c_str(step.action_type),
-                  typeid(e).name(), e.what());
-        break;
       }
+    } catch (const simgrid::Exception& e) {
+      XBT_DEBUG("During %s, failed to send message because of a %s exception (%s)", to_c_str(current_action),
+                typeid(e).name(), e.what());
     }
     try {
       sg4::this_actor::sleep_until(end_time);
@@ -283,21 +284,21 @@ class ReceiveAgent {
     // Make sure we have a clean slate
     xbt_assert(not mbox_.eager->listen(), "Eager mailbox should be empty when starting a test");
     xbt_assert(not mbox_.rdv->listen(), "RDV mailbox should be empty when starting a test");
-    for (; step_index < s.steps.size(); step_index++) {
-      const Step& step = s.steps[step_index];
-      if (step.entity != Step::Entity::RCV || step.type != Step::Type::ACTION)
-        continue;
-      try {
+
+    Action current_action;
+    try {
+      for (; step_index < s.steps.size(); step_index++) {
+        const Step& step = s.steps[step_index];
+        if (step.entity != Step::Entity::RCV || step.type != Step::Type::ACTION)
+          continue;
+
+        current_action = Action::SLEEP;
         sg4::this_actor::sleep_until(s.start_time + step.rel_time);
-      } catch (const simgrid::Exception& e) {
-        XBT_DEBUG("During Sleep, failed to receive message because of a %s exception (%s)", typeid(e).name(), e.what());
-        break;
-      }
-      // Check if the other host is still OK.
-      if (not other_host_->is_on())
-        break;
-      // Perform the action
-      try {
+
+        // Check if the other host is still OK.
+        if (not other_host_->is_on())
+          break;
+        // Perform the action
         switch (step.action_type) {
           case Action::GET:
             comm = do_get(type, receive_ptr);
@@ -311,11 +312,10 @@ class ReceiveAgent {
           default:
             xbt_die("Not a valid action for RCV");
         }
-      } catch (const simgrid::Exception& e) {
-        XBT_DEBUG("During %s, failed to receive message because of a %s exception (%s)", to_c_str(step.action_type),
-                  typeid(e).name(), e.what());
-        break;
       }
+    } catch (const simgrid::Exception& e) {
+      XBT_DEBUG("During %s, failed to receive message because of a %s exception (%s)", to_c_str(current_action),
+                typeid(e).name(), e.what());
     }
     try {
       sg4::this_actor::sleep_until(end_time - .1);
@@ -413,7 +413,7 @@ int main(int argc, char* argv[])
                   {sg4::LinkInRoute{link}}, false);
   zone->seal();
 
-  sg4::Host::on_state_change_cb([mbox](sg4::Host const& host) {
+  sg4::Host::on_onoff_cb([mbox](sg4::Host const& host) {
     XBT_DEBUG("Host %s is now %s", host.get_cname(), host.is_on() ? "ON " : "OFF");
     if (not host.is_on()) {
       mbox.eager->clear();
@@ -421,7 +421,7 @@ int main(int argc, char* argv[])
     }
   });
 
-  sg4::Link::on_state_change_cb(
+  sg4::Link::on_onoff_cb(
       [](sg4::Link const& lnk) { XBT_DEBUG("Link %s is now %s", lnk.get_cname(), lnk.is_on() ? "ON " : "OFF"); });
 
   e.run_until(end_time);
@@ -457,7 +457,8 @@ static void prepareScenario(ScenarioContext& ctx, CommType type, double duration
           DIE_IMPOSSIBLE;
       }
     }
-    ctx.scenarios.push_back({type, ctx.start_time, duration, sender_expected, receiver_expected, steps, ctx.index});
+    Scenario scen{type, ctx.start_time, duration, sender_expected, receiver_expected, steps, ctx.index};
+    ctx.scenarios.push_back(scen);
     ctx.active++;
   }
   ctx.index++;