gnunet-svn
[Top][All Lists]
Advanced

[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 */




reply via email to

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