[Top][All Lists]
[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,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r15869 - gnunet/src/transport,
gnunet <=