gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r15869 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r15869 - gnunet/src/transport
Date: Thu, 7 Jul 2011 11:53:14 +0200

Author: wachs
Date: 2011-07-07 11:53:14 +0200 (Thu, 07 Jul 2011)
New Revision: 15869

Modified:
   gnunet/src/transport/gnunet-service-transport.c
   gnunet/src/transport/test_transport_ats_4addr.conf
   gnunet/src/transport/test_transport_ats_multiple_peers.c
   gnunet/src/transport/transport_ats.c
   gnunet/src/transport/transport_ats.h
Log:
splitting transport service and ats


Modified: gnunet/src/transport/gnunet-service-transport.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport.c     2011-07-07 09:34:13 UTC 
(rev 15868)
+++ gnunet/src/transport/gnunet-service-transport.c     2011-07-07 09:53:14 UTC 
(rev 15869)
@@ -920,6 +920,11 @@
 static GNUNET_SCHEDULER_TaskIdentifier hello_task;
 
 /**
+ * Identifier of ats scheduler task.
+ */
+static GNUNET_SCHEDULER_TaskIdentifier ats_task;
+
+/**
  * Is transport service shutting down ?
  */
 static int shutdown_in_progress;
@@ -983,8 +988,7 @@
       fal->quality[c].values[1] = fal->quality[c].values[2];
       fal->quality[c].values[2] = value;
       set = GNUNET_YES;
-      if (ats != NULL)
-        ats->stat.modified_quality = GNUNET_YES;
+      ats_modify_problem_state (ats, ATS_QUALITY_UPDATED);
     }
   }
   if (set == GNUNET_NO)
@@ -995,8 +999,7 @@
       {
         fal->ressources[c].c = value;
         set = GNUNET_YES;
-        if (ats != NULL)
-          ats->stat.modified_resources = GNUNET_YES;
+        ats_modify_problem_state (ats, ATS_COST_UPDATED);
       }
     }
   }
@@ -2430,8 +2433,8 @@
     }
   GNUNET_free_non_null(pos->ressources);
   GNUNET_free_non_null(pos->quality);
-  if (ats != NULL)
-    ats->stat.recreate_problem = GNUNET_YES;
+  ats_modify_problem_state (ats, ATS_MODIFIED);
+
   if (GNUNET_YES != pos->connected)
     {
       /* nothing else to do, connection was never up... */
@@ -2603,7 +2606,7 @@
   /* notify ats about connecting peer */
   if ((ats != NULL) && (shutdown_in_progress == GNUNET_NO))
   {
-    ats->stat.recreate_problem = GNUNET_YES;
+    ats_modify_problem_state(ats, ATS_MODIFIED);
     ats_calculate_bandwidth_distribution (ats, stats, neighbours);
   }
 
@@ -2652,7 +2655,7 @@
   /* notify ats about connecting peer */
   if ((ats != NULL) && (shutdown_in_progress == GNUNET_NO))
   {
-    ats->stat.recreate_problem = GNUNET_YES;
+    ats_modify_problem_state(ats, ATS_MODIFIED);
     ats_calculate_bandwidth_distribution (ats, stats, neighbours);
   }
 
@@ -4817,8 +4820,7 @@
   if (GNUNET_YES == n->received_pong)
     notify_clients_disconnect (&n->id);
 
-  if (ats != NULL)
-      ats->stat.recreate_problem = GNUNET_YES;
+  ats_modify_problem_state(ats, ATS_QUALITY_COST_UPDATED);
 
   /* clean up all plugins, cancel connections and pending transmissions */
   while (NULL != (rpos = n->plugins))
@@ -5322,19 +5324,16 @@
        //GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 
"GNUNET_MESSAGE_TYPE_TRANSPORT_ATS: %i \n", value);
        /* Force ressource and quality update */
        if ((value == 4) && (ats != NULL))
-         {
-           ats->stat.modified_resources = GNUNET_YES;
-           ats->stat.modified_quality = GNUNET_YES;
-         }
+            ats_modify_problem_state(ats, ATS_QUALITY_COST_UPDATED);
        /* Force cost update */
        if ((value == 3) && (ats != NULL))
-         ats->stat.modified_resources = GNUNET_YES;
+          ats_modify_problem_state(ats, ATS_COST_UPDATED);
        /* Force quality update */
        if ((value == 2) && (ats != NULL))
-         ats->stat.modified_quality = GNUNET_YES;
+          ats_modify_problem_state(ats, ATS_QUALITY_UPDATED);
        /* Force full rebuild */
        if ((value == 1) && (ats != NULL))
-         ats->stat.recreate_problem = GNUNET_YES;
+          ats_modify_problem_state(ats, ATS_MODIFIED);
       }
     
 #if DEBUG_PING_PONG
@@ -6007,6 +6006,13 @@
   GNUNET_CONTAINER_multihashmap_destroy (validation_map);
   validation_map = NULL;
 
+  if (ats_task != GNUNET_SCHEDULER_NO_TASK)
+  {
+    GNUNET_SCHEDULER_cancel(ats_task);
+    ats_task = GNUNET_SCHEDULER_NO_TASK;
+  }
+
+
   if (ats != NULL)
     ats_shutdown (ats);
 
@@ -6060,7 +6066,7 @@
   if (ats==NULL)
     return;
 
-  ats->ats_task = GNUNET_SCHEDULER_NO_TASK;
+  ats_task = GNUNET_SCHEDULER_NO_TASK;
   if ( (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
       return;
   if (shutdown_in_progress == GNUNET_YES)
@@ -6069,7 +6075,7 @@
        GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Running scheduled calculation\n");
 #endif
   ats_calculate_bandwidth_distribution (ats, stats, neighbours);
-  ats->ats_task = GNUNET_SCHEDULER_add_delayed (ats->exec_interval,
+  ats_task = GNUNET_SCHEDULER_add_delayed (ats->exec_interval,
                                   &schedule_ats, ats);
 }
 
@@ -6211,7 +6217,7 @@
 
   ats = ats_init (cfg);
   if (ats != NULL)
-    ats->ats_task = GNUNET_SCHEDULER_add_now (&schedule_ats, ats);
+    ats_task = GNUNET_SCHEDULER_add_now (&schedule_ats, ats);
 
 
 #if DEBUG_TRANSPORT

Modified: gnunet/src/transport/test_transport_ats_4addr.conf
===================================================================
--- gnunet/src/transport/test_transport_ats_4addr.conf  2011-07-07 09:34:13 UTC 
(rev 15868)
+++ gnunet/src/transport/test_transport_ats_4addr.conf  2011-07-07 09:53:14 UTC 
(rev 15869)
@@ -10,7 +10,7 @@
 PLUGINS = tcp
 #DEBUG = YES
 #PREFIX = xterm -e xterm -T transport -e gdb -x cmd --args
-#PREFIX = valgrind --tool=memcheck --log-file=logs%p
+#PREFIX = valgrind --tool=memcheck --log-file=multiple_peers/logs%p
 #WAN_BW_LIMIT_DOWN = 100
 #WAN_BW_LIMIT_UP = 1000000
 #LAN_BW_LIMIT_DOWN = 100

Modified: gnunet/src/transport/test_transport_ats_multiple_peers.c
===================================================================
--- gnunet/src/transport/test_transport_ats_multiple_peers.c    2011-07-07 
09:34:13 UTC (rev 15868)
+++ gnunet/src/transport/test_transport_ats_multiple_peers.c    2011-07-07 
09:53:14 UTC (rev 15869)
@@ -26,6 +26,7 @@
 #include "gnunet_transport_service.h"
 #include "gnunet_scheduler_lib.h"
 #include "gauger.h"
+#include "transport_ats.h"
 
 #define VERBOSE GNUNET_NO
 
@@ -36,12 +37,6 @@
 #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 300)
 #define SEND_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 
1)
 
-#define ATS_NEW 0
-#define ATS_Q_UPDATED 1
-#define ATS_C_UPDATED 2
-#define ATS_QC_UPDATED 3
-#define ATS_UNMODIFIED 4
-
 static int ok;
 
 static int peers_left;
@@ -290,7 +285,9 @@
          int is_persistent)
 {
   static int printed = GNUNET_NO;
-  //GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%s = %llu\n", name ,value);
+#if VERBOSE_ATS
+  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%s = %llu\n", name ,value);
+#endif
   if (0 == strcmp (name,"ATS invalid solutions"))
     {
       if (stats_task != GNUNET_SCHEDULER_NO_TASK)
@@ -386,7 +383,7 @@
                    }
                  
                }
-             if (current.state == ATS_Q_UPDATED)
+             if (current.state == ATS_QUALITY_UPDATED)
                {
                  if (c_modified < MEASUREMENTS)
                    {
@@ -469,11 +466,11 @@
          char * cont;
          if (value == ATS_NEW)
            cont = "NEW";
-         if (value == ATS_C_UPDATED)
+         if (value == ATS_COST_UPDATED)
            cont = "C_UPDATED";
-         if (value == ATS_Q_UPDATED)
+         if (value == ATS_QUALITY_UPDATED)
            cont = "Q_UPDATED";
-         if (value == ATS_QC_UPDATED)
+         if (value == ATS_QUALITY_COST_UPDATED)
            cont = "QC_UPDATED";
          if (value == ATS_UNMODIFIED)
            cont = "UNMODIFIED";

Modified: gnunet/src/transport/transport_ats.c
===================================================================
--- gnunet/src/transport/transport_ats.c        2011-07-07 09:34:13 UTC (rev 
15868)
+++ gnunet/src/transport/transport_ats.c        2011-07-07 09:53:14 UTC (rev 
15869)
@@ -730,7 +730,10 @@
 
 static void _dummy2 ()
 {
+  ats_modify_problem_state (NULL, 0);
    _dummy();
+   int t = ATS_COST_UPDATED + ATS_MODIFIED + ATS_NEW;
+   t = 0;
 }
 
 /*
@@ -765,7 +768,6 @@
   ats->exec_interval = ATS_EXEC_INTERVAL;
   ats->max_exec_duration = ATS_MAX_EXEC_DURATION;
   ats->max_iterations = ATS_MAX_ITERATIONS;
-  ats->ats_task = GNUNET_SCHEDULER_NO_TASK;
 
   ats->D = 1.0;
   ats->U = 1.0;
@@ -1497,8 +1499,38 @@
   ats->stat.valid = GNUNET_SYSERR;
 }
 
+void ats_modify_problem_state (struct ATS_Handle * ats, enum ATS_problem_state 
s)
+{
+  if (ats == NULL)
+    return;
+  switch (s)
+  {
+  case ATS_NEW :
+    ats->stat.recreate_problem = GNUNET_NO;
+    ats->stat.modified_quality = GNUNET_NO;
+    ats->stat.modified_resources = GNUNET_NO;
+    break;
+  case ATS_MODIFIED:
+    ats->stat.recreate_problem = GNUNET_YES;
+    break;
+  case ATS_QUALITY_UPDATED :
+    ats->stat.modified_quality = GNUNET_YES;
+    break;
+  case ATS_COST_UPDATED :
+    ats->stat.modified_resources = GNUNET_YES;
+    break;
+  case ATS_QUALITY_COST_UPDATED:
+    ats->stat.modified_resources = GNUNET_YES;
+    ats->stat.modified_quality = GNUNET_YES;
+    break;
+  default:
+    return;
+  }
 
 
+
+}
+
 void ats_solve_problem (struct ATS_Handle * ats,
     unsigned int max_it,
     unsigned int  max_dur,
@@ -1646,9 +1678,6 @@
 #if DEBUG_ATS
   GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "ATS shutdown\n");
 #endif
-  if (ats->ats_task != GNUNET_SCHEDULER_NO_TASK)
-    GNUNET_SCHEDULER_cancel(ats->ats_task);
-  ats->ats_task = GNUNET_SCHEDULER_NO_TASK;
   ats_delete_problem (ats);
   _lp_free_env();
 
@@ -1864,15 +1893,15 @@
           GNUNET_STATISTICS_set (stats, "ATS state",ATS_NEW, GNUNET_NO);
       else if ((ats->stat.modified_resources == GNUNET_YES) &&
               (ats->stat.modified_quality == GNUNET_NO))
-        GNUNET_STATISTICS_set (stats, "ATS state", ATS_C_UPDATED, GNUNET_NO);
+        GNUNET_STATISTICS_set (stats, "ATS state", ATS_COST_UPDATED, 
GNUNET_NO);
       else if ((ats->stat.modified_resources == GNUNET_NO) &&
               (ats->stat.modified_quality == GNUNET_YES) &&
               (ats->stat.simplex_rerun_required == GNUNET_NO))
-        GNUNET_STATISTICS_set (stats, "ATS state", ATS_Q_UPDATED, GNUNET_NO);
+        GNUNET_STATISTICS_set (stats, "ATS state", ATS_QUALITY_UPDATED, 
GNUNET_NO);
       else if ((ats->stat.modified_resources == GNUNET_YES) &&
               (ats->stat.modified_quality == GNUNET_YES) &&
               (ats->stat.simplex_rerun_required == GNUNET_NO))
-        GNUNET_STATISTICS_set (stats, "ATS state", ATS_QC_UPDATED, GNUNET_NO);
+        GNUNET_STATISTICS_set (stats, "ATS state", ATS_QUALITY_COST_UPDATED, 
GNUNET_NO);
       else if (ats->stat.simplex_rerun_required == GNUNET_NO)
         GNUNET_STATISTICS_set (stats, "ATS state", ATS_UNMODIFIED, GNUNET_NO);
     }

Modified: gnunet/src/transport/transport_ats.h
===================================================================
--- gnunet/src/transport/transport_ats.h        2011-07-07 09:34:13 UTC (rev 
15868)
+++ gnunet/src/transport/transport_ats.h        2011-07-07 09:53:14 UTC (rev 
15869)
@@ -30,12 +30,41 @@
 
 #define VERY_BIG_DOUBLE_VALUE 100000000000LL
 
-#define ATS_NEW 0
-#define ATS_Q_UPDATED 1
-#define ATS_C_UPDATED 2
-#define ATS_QC_UPDATED 3
-#define ATS_UNMODIFIED 4
+enum ATS_problem_state
+{
+  /**
+   * Problem is new / unmodified
+   */
+  ATS_NEW = 0,
 
+  /**
+   * Problem quality properties were modified
+   */
+  ATS_QUALITY_UPDATED = 1,
+
+  /**
+   * Problem ressource properties were modified
+   */
+  ATS_COST_UPDATED = 2,
+
+  /**
+   * Problem quality and ressource properties were modified
+   */
+  ATS_QUALITY_COST_UPDATED = 3,
+
+  /**
+   * Problem is modified and needs to be completely recalculated
+   * due to e.g. connecting or disconnecting peers
+   */
+  ATS_MODIFIED = 4,
+
+  /**
+   * Problem is modified and needs to be completely recalculated
+   * due to e.g. connecting or disconnecting peers
+   */
+  ATS_UNMODIFIED = 8
+};
+
 /*
 *  ATS data structures
 */
@@ -163,11 +192,6 @@
 #endif
 
     /**
-     * task to recalculate the bandwidth assignment
-     */
-    GNUNET_SCHEDULER_TaskIdentifier ats_task;
-
-    /**
      * Current state of the GLPK problem
      */
     struct ATS_stat stat;
@@ -378,6 +402,9 @@
                     int v_n_min,
                     struct ATS_stat *stat);
 
+void ats_modify_problem_state (struct ATS_Handle * ats,
+    enum ATS_problem_state s);
+
 void
 ats_calculate_bandwidth_distribution (struct ATS_Handle * ats,
     struct GNUNET_STATISTICS_Handle *stats,




reply via email to

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