gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r20897 - gnunet/src/integration-tests


From: gnunet
Subject: [GNUnet-SVN] r20897 - gnunet/src/integration-tests
Date: Wed, 4 Apr 2012 17:04:00 +0200

Author: wachs
Date: 2012-04-04 17:03:59 +0200 (Wed, 04 Apr 2012)
New Revision: 20897

Modified:
   gnunet/src/integration-tests/connection_watchdog.c
Log:
- consistency check


Modified: gnunet/src/integration-tests/connection_watchdog.c
===================================================================
--- gnunet/src/integration-tests/connection_watchdog.c  2012-04-04 14:18:43 UTC 
(rev 20896)
+++ gnunet/src/integration-tests/connection_watchdog.c  2012-04-04 15:03:59 UTC 
(rev 20897)
@@ -34,10 +34,14 @@
 #include "gnunet_transport_service.h"
 #include "gnunet_statistics_service.h"
 
+
+#define CHECK_DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5)
+
 /**
  * Final status code.
  */
 static int ret;
+static int retry;
 
 struct GNUNET_TRANSPORT_Handle *th;
 struct GNUNET_CORE_Handle *ch;
@@ -46,6 +50,7 @@
 static unsigned int transport_connections;
 static unsigned int core_connections;
 
+static GNUNET_SCHEDULER_TaskIdentifier check_task;
 
 
 static struct GNUNET_CONTAINER_MultiHashMap *peers;
@@ -62,6 +67,7 @@
                   const GNUNET_HashCode * key,
                   void *value)
 {
+  int *fail = cls;
   struct PeerContainer *pc = value;
   if (pc->core_connected != pc->transport_connected)
   {
@@ -70,6 +76,7 @@
      GNUNET_i2s (&pc->id),
      (GNUNET_YES == pc->transport_connected) ? "YES" : "NO",
      (GNUNET_YES == pc->core_connected) ? "YES" : "NO");
+    (*fail) ++;
   }
 
   return GNUNET_OK;
@@ -86,10 +93,26 @@
   return GNUNET_OK;
 }
 
-static void map_check (void)
+static void
+map_cleanup (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
+  GNUNET_CONTAINER_multihashmap_iterate (peers, &map_cleanup_it, NULL);
+  GNUNET_CONTAINER_multihashmap_destroy(peers);
+}
 
-  GNUNET_CONTAINER_multihashmap_iterate (peers, &map_check_it, NULL);
+static void
+map_check (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  int fail = 0;
+  check_task = GNUNET_SCHEDULER_NO_TASK;
+  GNUNET_CONTAINER_multihashmap_iterate (peers, &map_check_it, &fail);
+  GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+       "Inconsistent peers after connection consistency check: %u\n", fail);
+
+  if (NULL != cls)
+  {
+    GNUNET_SCHEDULER_add_now (cls, NULL);
+  }
 }
 
 static void
@@ -111,7 +134,6 @@
     if (GNUNET_NO == pc->transport_connected)
     {
       pc->transport_connected = GNUNET_YES;
-      return;
     }
     else
     {
@@ -128,7 +150,6 @@
     if (GNUNET_NO == pc->core_connected)
     {
       pc->core_connected = GNUNET_YES;
-      return;
     }
     else
     {
@@ -138,9 +159,11 @@
            GNUNET_i2s (&pc->id),
                "TRANSPORT", (pc->transport_connected == GNUNET_YES) ? "yes" : 
"no");
       GNUNET_break (0);
-      return;
     }
   }
+  if (GNUNET_SCHEDULER_NO_TASK != check_task)
+    GNUNET_SCHEDULER_cancel(check_task);
+  check_task = GNUNET_SCHEDULER_add_delayed(CHECK_DELAY, &map_check, NULL);
 }
 
 
@@ -209,6 +232,10 @@
     GNUNET_free (pc);
   }
 
+  if (GNUNET_SCHEDULER_NO_TASK != check_task)
+    GNUNET_SCHEDULER_cancel(check_task);
+  check_task = GNUNET_SCHEDULER_add_delayed(CHECK_DELAY, &map_check, NULL);
+
 }
 
 
@@ -228,10 +255,12 @@
     ch = NULL;
   }
 
-  map_check();
-
-  GNUNET_CONTAINER_multihashmap_iterate (peers, &map_cleanup_it, NULL);
-  GNUNET_CONTAINER_multihashmap_destroy(peers);
+  if (GNUNET_SCHEDULER_NO_TASK != check_task)
+  {
+    GNUNET_SCHEDULER_cancel(check_task);
+    check_task = GNUNET_SCHEDULER_NO_TASK;
+  }
+  check_task = GNUNET_SCHEDULER_add_now (&map_check, &map_cleanup);
 }
 
 void
@@ -349,7 +378,6 @@
   GNUNET_assert (ch != NULL);
 
   GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &cleanup_task, 
NULL);
-
 }
 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]