diff options
author | Omar Tarabai <tarabai@devegypt.com> | 2014-05-02 21:01:37 +0000 |
---|---|---|
committer | Omar Tarabai <tarabai@devegypt.com> | 2014-05-02 21:01:37 +0000 |
commit | 0e8b6f07503810a220e500fa20e05a3ce33bce7d (patch) | |
tree | 4ff767bea9113bb95e6e8ee0e0b306749124e3d3 /src | |
parent | 2295fa452abce952d02074af06bc08e265e8ed7c (diff) | |
download | gnunet-0e8b6f07503810a220e500fa20e05a3ce33bce7d.tar.gz gnunet-0e8b6f07503810a220e500fa20e05a3ce33bce7d.zip |
fix in sensor scheduling
Diffstat (limited to 'src')
-rw-r--r-- | src/sensor/gnunet-service-sensor.c | 57 | ||||
-rw-r--r-- | src/sensor/sensors/averagepingrtt | 2 | ||||
-rw-r--r-- | src/sensor/sensors/connectedpeers | 2 |
3 files changed, 49 insertions, 12 deletions
diff --git a/src/sensor/gnunet-service-sensor.c b/src/sensor/gnunet-service-sensor.c index 23601c50f..31dcf515d 100644 --- a/src/sensor/gnunet-service-sensor.c +++ b/src/sensor/gnunet-service-sensor.c | |||
@@ -82,7 +82,7 @@ struct SensorInfo | |||
82 | /* | 82 | /* |
83 | * Time interval to collect sensor information (e.g. every 1 min) | 83 | * Time interval to collect sensor information (e.g. every 1 min) |
84 | */ | 84 | */ |
85 | struct GNUNET_TIME_Relative *interval; | 85 | struct GNUNET_TIME_Relative interval; |
86 | 86 | ||
87 | /* | 87 | /* |
88 | * Lifetime of an information sample after which it is deleted from storage | 88 | * Lifetime of an information sample after which it is deleted from storage |
@@ -144,6 +144,11 @@ struct SensorInfo | |||
144 | */ | 144 | */ |
145 | struct GNUNET_TIME_Relative *p2p_interval; | 145 | struct GNUNET_TIME_Relative *p2p_interval; |
146 | 146 | ||
147 | /** | ||
148 | * Execution task (OR GNUNET_SCHEDULER_NO_TASK) | ||
149 | */ | ||
150 | GNUNET_SCHEDULER_TaskIdentifier execution_task; | ||
151 | |||
147 | }; | 152 | }; |
148 | 153 | ||
149 | /** | 154 | /** |
@@ -157,6 +162,29 @@ static const struct GNUNET_CONFIGURATION_Handle *cfg; | |||
157 | struct GNUNET_CONTAINER_MultiHashMap *sensors; | 162 | struct GNUNET_CONTAINER_MultiHashMap *sensors; |
158 | 163 | ||
159 | /** | 164 | /** |
165 | * Remove sensor execution from scheduler | ||
166 | * | ||
167 | * @param cls unused | ||
168 | * @param key hash of sensor name, key to hashmap | ||
169 | * @param value a 'struct SensorInfo *' | ||
170 | * @return #GNUNET_YES if we should continue to | ||
171 | * iterate, | ||
172 | * #GNUNET_NO if not. | ||
173 | */ | ||
174 | int unschedule_sensor(void *cls, | ||
175 | const struct GNUNET_HashCode *key, void *value) | ||
176 | { | ||
177 | struct SensorInfo *sensorinfo = value; | ||
178 | |||
179 | if(GNUNET_SCHEDULER_NO_TASK != sensorinfo->execution_task) | ||
180 | { | ||
181 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Unscheduling sensor `%s'\n", sensorinfo->name); | ||
182 | GNUNET_SCHEDULER_cancel(sensorinfo->execution_task); | ||
183 | } | ||
184 | return GNUNET_YES; | ||
185 | } | ||
186 | |||
187 | /** | ||
160 | * Task run during shutdown. | 188 | * Task run during shutdown. |
161 | * | 189 | * |
162 | * @param cls unused | 190 | * @param cls unused |
@@ -166,6 +194,7 @@ static void | |||
166 | shutdown_task (void *cls, | 194 | shutdown_task (void *cls, |
167 | const struct GNUNET_SCHEDULER_TaskContext *tc) | 195 | const struct GNUNET_SCHEDULER_TaskContext *tc) |
168 | { | 196 | { |
197 | GNUNET_CONTAINER_multihashmap_iterate(sensors, &unschedule_sensor, NULL); | ||
169 | GNUNET_SCHEDULER_shutdown(); | 198 | GNUNET_SCHEDULER_shutdown(); |
170 | } | 199 | } |
171 | 200 | ||
@@ -232,7 +261,6 @@ load_sensor_from_cfg(struct GNUNET_CONFIGURATION_Handle *cfg, const char *sectio | |||
232 | char *starttime_str; | 261 | char *starttime_str; |
233 | char *endtime_str; | 262 | char *endtime_str; |
234 | unsigned long long interval_sec; | 263 | unsigned long long interval_sec; |
235 | struct GNUNET_TIME_Relative interval; | ||
236 | 264 | ||
237 | sensor = GNUNET_new(struct SensorInfo); | 265 | sensor = GNUNET_new(struct SensorInfo); |
238 | //name | 266 | //name |
@@ -290,9 +318,10 @@ load_sensor_from_cfg(struct GNUNET_CONFIGURATION_Handle *cfg, const char *sectio | |||
290 | GNUNET_free(sensor); | 318 | GNUNET_free(sensor); |
291 | return NULL; | 319 | return NULL; |
292 | } | 320 | } |
293 | interval = GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, interval_sec); | 321 | sensor->interval = GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, interval_sec); |
294 | sensor->interval = &interval; | 322 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Interval loaded: %" PRIu64 "\n", sensor->interval.rel_value_us); |
295 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Interval loaded: %" PRIu64 "\n", sensor->interval->rel_value_us); | 323 | //execution task |
324 | sensor->execution_task = GNUNET_SCHEDULER_NO_TASK; | ||
296 | 325 | ||
297 | return sensor; | 326 | return sensor; |
298 | } | 327 | } |
@@ -591,20 +620,20 @@ should_run_sensor(struct SensorInfo *sensorinfo) | |||
591 | 620 | ||
592 | if(GNUNET_NO == sensorinfo->enabled) | 621 | if(GNUNET_NO == sensorinfo->enabled) |
593 | { | 622 | { |
594 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Sensor `%s' is disabled, will not run\n"); | 623 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Sensor `%s' is disabled, will not run\n", sensorinfo->name); |
595 | return GNUNET_NO; | 624 | return GNUNET_NO; |
596 | } | 625 | } |
597 | now = GNUNET_TIME_absolute_get(); | 626 | now = GNUNET_TIME_absolute_get(); |
598 | if(NULL != sensorinfo->start_time | 627 | if(NULL != sensorinfo->start_time |
599 | && now.abs_value_us < sensorinfo->start_time->abs_value_us) | 628 | && now.abs_value_us < sensorinfo->start_time->abs_value_us) |
600 | { | 629 | { |
601 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Start time for sensor `%s' not reached yet, will not run\n"); | 630 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Start time for sensor `%s' not reached yet, will not run\n", sensorinfo->name); |
602 | return GNUNET_NO; | 631 | return GNUNET_NO; |
603 | } | 632 | } |
604 | if(NULL != sensorinfo->end_time | 633 | if(NULL != sensorinfo->end_time |
605 | && now.abs_value_us >= sensorinfo->end_time->abs_value_us) | 634 | && now.abs_value_us >= sensorinfo->end_time->abs_value_us) |
606 | { | 635 | { |
607 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "End time for sensor `%s' passed, will not run\n"); | 636 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "End time for sensor `%s' passed, will not run\n", sensorinfo->name); |
608 | return GNUNET_NO; | 637 | return GNUNET_NO; |
609 | } | 638 | } |
610 | return GNUNET_YES; | 639 | return GNUNET_YES; |
@@ -622,9 +651,10 @@ run_sensor (void *cls, | |||
622 | { | 651 | { |
623 | struct SensorInfo *sensorinfo = cls; | 652 | struct SensorInfo *sensorinfo = cls; |
624 | 653 | ||
654 | sensorinfo->execution_task = GNUNET_SCHEDULER_NO_TASK; | ||
625 | if(GNUNET_NO == should_run_sensor(sensorinfo)) | 655 | if(GNUNET_NO == should_run_sensor(sensorinfo)) |
626 | return; | 656 | return; |
627 | //GNUNET_SCHEDULER_add_delayed(*sensorinfo->interval, &run_sensor, sensorinfo); | 657 | sensorinfo->execution_task = GNUNET_SCHEDULER_add_delayed(sensorinfo->interval, &run_sensor, sensorinfo); |
628 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Starting the execution of sensor `%s'\n", sensorinfo->name); | 658 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Starting the execution of sensor `%s'\n", sensorinfo->name); |
629 | } | 659 | } |
630 | 660 | ||
@@ -645,7 +675,14 @@ int schedule_sensor(void *cls, | |||
645 | 675 | ||
646 | if(GNUNET_NO == should_run_sensor(sensorinfo)) | 676 | if(GNUNET_NO == should_run_sensor(sensorinfo)) |
647 | return GNUNET_YES; | 677 | return GNUNET_YES; |
648 | GNUNET_SCHEDULER_add_delayed(*sensorinfo->interval, &run_sensor, sensorinfo); | 678 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Scheduling sensor `%s' to run after %" PRIu64 " microseconds\n", |
679 | sensorinfo->name, sensorinfo->interval.rel_value_us); | ||
680 | if(GNUNET_SCHEDULER_NO_TASK != sensorinfo->execution_task) | ||
681 | { | ||
682 | GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Sensor `%s' execution task already set, this should not happen\n", sensorinfo->name); | ||
683 | return GNUNET_NO; | ||
684 | } | ||
685 | sensorinfo->execution_task = GNUNET_SCHEDULER_add_delayed(sensorinfo->interval, &run_sensor, sensorinfo); | ||
649 | return GNUNET_YES; | 686 | return GNUNET_YES; |
650 | } | 687 | } |
651 | 688 | ||
diff --git a/src/sensor/sensors/averagepingrtt b/src/sensor/sensors/averagepingrtt index b7e714912..2012f555e 100644 --- a/src/sensor/sensors/averagepingrtt +++ b/src/sensor/sensors/averagepingrtt | |||
@@ -3,7 +3,7 @@ | |||
3 | VERSION = 1.0 | 3 | VERSION = 1.0 |
4 | DESCRIPTION = Calculate average ping latency to gnunet.org | 4 | DESCRIPTION = Calculate average ping latency to gnunet.org |
5 | CATEGORY = Internet-Connectivity | 5 | CATEGORY = Internet-Connectivity |
6 | ENABLED = YES | 6 | ENABLED = NO |
7 | 7 | ||
8 | # Start and end time format: %Y-%m-%d %H:%M:%S | 8 | # Start and end time format: %Y-%m-%d %H:%M:%S |
9 | #START_TIME = | 9 | #START_TIME = |
diff --git a/src/sensor/sensors/connectedpeers b/src/sensor/sensors/connectedpeers index 1b4e6a986..2e9bc53d7 100644 --- a/src/sensor/sensors/connectedpeers +++ b/src/sensor/sensors/connectedpeers | |||
@@ -3,7 +3,7 @@ | |||
3 | VERSION = 1.0 | 3 | VERSION = 1.0 |
4 | DESCRIPTION = Gets the number of connected peers from core | 4 | DESCRIPTION = Gets the number of connected peers from core |
5 | CATEGORY = P2P-Connectivity | 5 | CATEGORY = P2P-Connectivity |
6 | ENABLED = NO | 6 | ENABLED = YES |
7 | 7 | ||
8 | # Start and end time format: %Y-%m-%d %H:%M:%S | 8 | # Start and end time format: %Y-%m-%d %H:%M:%S |
9 | #START_TIME = | 9 | #START_TIME = |