[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r27312 - gnunet/src/experimentation
From: |
gnunet |
Subject: |
[GNUnet-SVN] r27312 - gnunet/src/experimentation |
Date: |
Mon, 27 May 2013 17:39:04 +0200 |
Author: wachs
Date: 2013-05-27 17:39:03 +0200 (Mon, 27 May 2013)
New Revision: 27312
Modified:
gnunet/src/experimentation/gnunet-daemon-experimentation.h
gnunet/src/experimentation/gnunet-daemon-experimentation_experiments.c
gnunet/src/experimentation/gnunet-daemon-experimentation_scheduler.c
Log:
scheduling
Modified: gnunet/src/experimentation/gnunet-daemon-experimentation.h
===================================================================
--- gnunet/src/experimentation/gnunet-daemon-experimentation.h 2013-05-27
15:09:30 UTC (rev 27311)
+++ gnunet/src/experimentation/gnunet-daemon-experimentation.h 2013-05-27
15:39:03 UTC (rev 27312)
@@ -34,12 +34,12 @@
/**
* Timeout between request and expected response
*/
-#define EXP_RESPONSE_TIMEOUT GNUNET_TIME_relative_multiply
(GNUNET_TIME_UNIT_SECONDS, 10)
+#define EXP_RESPONSE_TIMEOUT GNUNET_TIME_relative_multiply
(GNUNET_TIME_UNIT_SECONDS, 1)
/**
* Default experiment frequency
*/
-#define EXP_DEFAULT_EXP_FREQ GNUNET_TIME_relative_multiply
(GNUNET_TIME_UNIT_SECONDS, 60)
+#define EXP_DEFAULT_EXP_FREQ GNUNET_TIME_relative_multiply
(GNUNET_TIME_UNIT_SECONDS, 6)
/**
* Default experiment duration
@@ -84,6 +84,50 @@
/**
+ * Struct to store information about a specific experiment
+ */
+struct Experiment
+{
+ /* Header */
+ /* ----------------- */
+ char *name;
+
+ /* Experiment issuer */
+ struct GNUNET_PeerIdentity issuer;
+
+ /* Experiment version as timestamp of creation */
+ struct GNUNET_TIME_Absolute version;
+
+ /* Description */
+ char *description;
+
+ /* Required capabilities */
+ uint32_t required_capabilities;
+
+ /* Experiment timing */
+ /* ----------------- */
+
+ /* When to start experiment */
+ struct GNUNET_TIME_Absolute start;
+
+ /* When to end experiment */
+ struct GNUNET_TIME_Absolute stop;
+
+ /* How often to run experiment */
+ struct GNUNET_TIME_Relative frequency;
+
+ /* How long to run each execution */
+ struct GNUNET_TIME_Relative duration;
+
+
+ /* Experiment itself */
+ /* ----------------- */
+
+ /* TBD */
+};
+
+
+/**
* A experimentation node
*/
struct Node
@@ -207,6 +251,12 @@
* Start the scheduler component
*/
void
+GNUNET_EXPERIMENTATION_scheduler_add (struct Experiment *e);
+
+/**
+ * Start the scheduler component
+ */
+void
GNUNET_EXPERIMENTATION_scheduler_start ();
Modified: gnunet/src/experimentation/gnunet-daemon-experimentation_experiments.c
===================================================================
--- gnunet/src/experimentation/gnunet-daemon-experimentation_experiments.c
2013-05-27 15:09:30 UTC (rev 27311)
+++ gnunet/src/experimentation/gnunet-daemon-experimentation_experiments.c
2013-05-27 15:39:03 UTC (rev 27312)
@@ -32,50 +32,7 @@
#include "gnunet-daemon-experimentation.h"
-/**
- * Struct to store information about a specific experiment
- */
-struct Experiment
-{
- /* Header */
- /* ----------------- */
- char *name;
- /* Experiment issuer */
- struct GNUNET_PeerIdentity issuer;
-
- /* Experiment version as timestamp of creation */
- struct GNUNET_TIME_Absolute version;
-
- /* Description */
- char *description;
-
- /* Required capabilities */
- uint32_t required_capabilities;
-
- /* Experiment timing */
- /* ----------------- */
-
- /* When to start experiment */
- struct GNUNET_TIME_Absolute start;
-
- /* When to end experiment */
- struct GNUNET_TIME_Absolute stop;
-
- /* How often to run experiment */
- struct GNUNET_TIME_Relative frequency;
-
- /* How long to run each execution */
- struct GNUNET_TIME_Relative duration;
-
-
- /* Experiment itself */
- /* ----------------- */
-
- /* TBD */
-};
-
-
/**
* Struct to store information about an experiment issuer
*/
@@ -210,6 +167,8 @@
GNUNET_CONTAINER_multihashmap_put (experiments, &e->issuer.hashPubKey,
e, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
GNUNET_STATISTICS_set (GSE_stats, "# experiments",
GNUNET_CONTAINER_multihashmap_size (experiments), GNUNET_NO);
+ GNUNET_EXPERIMENTATION_scheduler_add (e);
+
return GNUNET_OK;
}
Modified: gnunet/src/experimentation/gnunet-daemon-experimentation_scheduler.c
===================================================================
--- gnunet/src/experimentation/gnunet-daemon-experimentation_scheduler.c
2013-05-27 15:09:30 UTC (rev 27311)
+++ gnunet/src/experimentation/gnunet-daemon-experimentation_scheduler.c
2013-05-27 15:39:03 UTC (rev 27312)
@@ -31,11 +31,65 @@
#include "gnunet_statistics_service.h"
#include "gnunet-daemon-experimentation.h"
+struct ScheduledExperiment {
+ struct ScheduledExperiment *next;
+ struct ScheduledExperiment *prev;
+ struct Experiment *e;
+ GNUNET_SCHEDULER_TaskIdentifier task;
+};
+
+struct ScheduledExperiment *list_head;
+struct ScheduledExperiment *list_tail;
+
+
+static void run (void *cls,const struct GNUNET_SCHEDULER_TaskContext* tc)
+{
+ struct ScheduledExperiment *se = cls;
+ //struct GNUNET_TIME_Relative end;
+ se->task = GNUNET_SCHEDULER_NO_TASK;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Running `%s'\n", se->e->name);
+
+// end = GNUNET_TIME_absolute_get_remaining(se->e->stop);
+// if (0 < end.rel_value)
+// return; /* End of experiment is reached */
+
+//GNUNET_break (0);
+ se->task = GNUNET_SCHEDULER_add_delayed (se->e->frequency, &run, se);
+}
+
/**
* Start the scheduler component
*/
void
+GNUNET_EXPERIMENTATION_scheduler_add (struct Experiment *e)
+{
+ struct ScheduledExperiment *se;
+ struct GNUNET_TIME_Relative start;
+ struct GNUNET_TIME_Relative end;
+
+ start = GNUNET_TIME_absolute_get_remaining(e->start);
+ end = GNUNET_TIME_absolute_get_remaining(e->stop);
+
+ if (0 == end.rel_value)
+ return; /* End of experiment is reached */
+
+ se = GNUNET_malloc (sizeof (struct ScheduledExperiment));
+ se->e = e;
+ if (0 == start.rel_value)
+ se->task = GNUNET_SCHEDULER_add_now (&run, se);
+ else
+ se->task = GNUNET_SCHEDULER_add_delayed (start, &run,
se);
+
+ GNUNET_CONTAINER_DLL_insert (list_head, list_tail, se);
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Scheduled `%s'\n", e->name);
+}
+
+/**
+ * Start the scheduler component
+ */
+void
GNUNET_EXPERIMENTATION_scheduler_start ()
{
@@ -48,7 +102,21 @@
void
GNUNET_EXPERIMENTATION_scheduler_stop ()
{
+ struct ScheduledExperiment *cur;
+ struct ScheduledExperiment *next;
+ next = list_head;
+ while (NULL != (cur = next))
+ {
+ next = cur->next;
+ GNUNET_CONTAINER_DLL_remove (list_head, list_tail, cur);
+ if (GNUNET_SCHEDULER_NO_TASK != cur->task)
+ {
+ GNUNET_SCHEDULER_cancel (cur->task);
+ cur->task = GNUNET_SCHEDULER_NO_TASK;
+ }
+ GNUNET_free (cur);
+ }
}
/* end of gnunet-daemon-experimentation_scheduler.c */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r27312 - gnunet/src/experimentation,
gnunet <=