From: Arnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Date: Tue, 24 May 2011 11:33:42 +0000 (+0200)
Subject: Report lost load with exit status.
X-Git-Tag: v0.1~62^2~3
X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/commitdiff_plain/c5a7539afc8ed6dc082772476fe3f74f2fa67e24

Report lost load with exit status.
---

diff --git a/main.cpp b/main.cpp
index bce9749..ed8039e 100644
--- a/main.cpp
+++ b/main.cpp
@@ -39,7 +39,8 @@ namespace {
         EXIT_FAILURE_SIMU  = 0x04,  // simulation failed
         EXIT_FAILURE_CLEAN = 0x08,  // error at cleanup
         EXIT_FAILURE_INTR  = 0x10,  // interrupted by user
-        EXIT_FAILURE_OTHER = 0x20,  // other error
+        EXIT_FAILURE_LOAD  = 0x20,  // lost load on exit
+        EXIT_FAILURE_OTHER = 0x40,  // other error
     };
 
     // Cannot be globally initialized...
@@ -107,32 +108,38 @@ static int simulation_main(int argc, char* argv[])
     return result;
 }
 
-static void check_for_lost_load()
+static bool check_for_lost_load()
 {
+    bool res = true;
     double total_init = process::get_total_load_init();
     double total_exit = process::get_total_load_exit();
     double lost = total_init - total_exit;
     double lost_ratio = 100.0 * lost / total_init;
-    if (lost_ratio < -opt::load_ratio_threshold)
+    if (lost_ratio < -opt::load_ratio_threshold) {
         XBT_ERROR("Gained load at exit! %g (%g%%) <============",
                   -lost, -lost_ratio);
-    else if (lost_ratio > opt::load_ratio_threshold)
+        res = false;
+    } else if (lost_ratio > opt::load_ratio_threshold) {
         XBT_ERROR("Lost load at exit! %g (%g%%) <============",
                   lost, lost_ratio);
-    else
+        res = false;
+    } else
         XBT_VERB("Total load at exit looks good: %g (%g%%)", lost, lost_ratio);
 
     double total_running = process::get_total_load_running();
     double running_ratio = 100.0 * total_running / total_init;
-    if (running_ratio < -opt::load_ratio_threshold)
+    if (running_ratio < -opt::load_ratio_threshold) {
         XBT_ERROR("Negative running load at exit! %g (%g%%) <============",
                   total_running, running_ratio);
-    else if (running_ratio > opt::load_ratio_threshold)
+        res = false;
+    } else if (running_ratio > opt::load_ratio_threshold) {
         XBT_ERROR("Remaining running load at exit! %g (%g%%) <============",
                   total_running, running_ratio);
-    else
+        res = false;
+    } else
         XBT_VERB("Running load at exit looks good: %g (%g%%)",
                  total_running, running_ratio);
+    return res;
 }
 
 static void signal_handler(int /*sig*/)
@@ -288,7 +295,8 @@ int main(int argc, char* argv[])
     if (simulated_time >= 0.0) {
         simulation_time.stop();
         elapsed_time.stop();
-        check_for_lost_load();
+        if (!check_for_lost_load())
+            exit_status |= EXIT_FAILURE_LOAD;
         XBT_INFO(",----[ Results ]");
         PR_STATS("Load", loads);
         PR_STATS("Computation", comps);