aboutsummaryrefslogtreecommitdiff
path: root/src/fs/fs_search.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-12-05 20:58:48 +0000
committerChristian Grothoff <christian@grothoff.org>2012-12-05 20:58:48 +0000
commitb66f2c50a63b8d1242eb5583fd49b33abee4183c (patch)
tree374ed9478540fec75dd03c3e712d14174d98c541 /src/fs/fs_search.c
parentfbdce8d7a2ec33531a6c1f27bfccf81865bc9a7d (diff)
downloadgnunet-b66f2c50a63b8d1242eb5583fd49b33abee4183c.tar.gz
gnunet-b66f2c50a63b8d1242eb5583fd49b33abee4183c.zip
-fix availability rank calculation in probe signal, immediately signal failed probes
Diffstat (limited to 'src/fs/fs_search.c')
-rw-r--r--src/fs/fs_search.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/fs/fs_search.c b/src/fs/fs_search.c
index 5e2ce3604..89a99ec03 100644
--- a/src/fs/fs_search.c
+++ b/src/fs/fs_search.c
@@ -186,9 +186,10 @@ signal_probe_result (struct GNUNET_FS_SearchResult *sr)
186 pi.value.search.specifics.update.cctx = sr->client_info; 186 pi.value.search.specifics.update.cctx = sr->client_info;
187 pi.value.search.specifics.update.meta = sr->meta; 187 pi.value.search.specifics.update.meta = sr->meta;
188 pi.value.search.specifics.update.uri = sr->uri; 188 pi.value.search.specifics.update.uri = sr->uri;
189 pi.value.search.specifics.update.availability_rank = sr->availability_success; 189 pi.value.search.specifics.update.availability_rank
190 pi.value.search.specifics.update.availability_certainty = 190 = 2 * sr->availability_success - sr->availability_trials;
191 sr->availability_trials; 191 pi.value.search.specifics.update.availability_certainty
192 = sr->availability_trials;
192 pi.value.search.specifics.update.applicability_rank = sr->optional_support; 193 pi.value.search.specifics.update.applicability_rank = sr->optional_support;
193 sr->client_info = GNUNET_FS_search_make_status_ (&pi, sr->sc); 194 sr->client_info = GNUNET_FS_search_make_status_ (&pi, sr->sc);
194 GNUNET_FS_search_start_probe_ (sr); 195 GNUNET_FS_search_start_probe_ (sr);
@@ -310,11 +311,19 @@ GNUNET_FS_search_probe_progress_ (void *cls,
310 sr = NULL; 311 sr = NULL;
311 break; 312 break;
312 case GNUNET_FS_STATUS_DOWNLOAD_ACTIVE: 313 case GNUNET_FS_STATUS_DOWNLOAD_ACTIVE:
313 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == sr->probe_cancel_task); 314 if (GNUNET_SCHEDULER_NO_TASK == sr->probe_cancel_task)
314 sr->probe_active_time = GNUNET_TIME_absolute_get (); 315 {
315 sr->probe_cancel_task = 316 sr->probe_active_time = GNUNET_TIME_absolute_get ();
317 sr->probe_cancel_task =
316 GNUNET_SCHEDULER_add_delayed (sr->remaining_probe_time, 318 GNUNET_SCHEDULER_add_delayed (sr->remaining_probe_time,
317 &probe_failure_handler, sr); 319 &probe_failure_handler, sr);
320 }
321 else
322 {
323 /* should only happen if the cancel task was already
324 created on 'DOWNLOAD_INACTIVE' as we were out of time */
325 GNUNET_break (0 == sr->remaining_probe_time.rel_value);
326 }
318 break; 327 break;
319 case GNUNET_FS_STATUS_DOWNLOAD_INACTIVE: 328 case GNUNET_FS_STATUS_DOWNLOAD_INACTIVE:
320 if (GNUNET_SCHEDULER_NO_TASK != sr->probe_cancel_task) 329 if (GNUNET_SCHEDULER_NO_TASK != sr->probe_cancel_task)
@@ -325,6 +334,9 @@ GNUNET_FS_search_probe_progress_ (void *cls,
325 dur = GNUNET_TIME_absolute_get_duration (sr->probe_active_time); 334 dur = GNUNET_TIME_absolute_get_duration (sr->probe_active_time);
326 sr->remaining_probe_time = 335 sr->remaining_probe_time =
327 GNUNET_TIME_relative_subtract (sr->remaining_probe_time, dur); 336 GNUNET_TIME_relative_subtract (sr->remaining_probe_time, dur);
337 if (0 == sr->remaining_probe_time.rel_value)
338 sr->probe_cancel_task =
339 GNUNET_SCHEDULER_add_now (&probe_failure_handler, sr);
328 GNUNET_FS_search_result_sync_ (sr); 340 GNUNET_FS_search_result_sync_ (sr);
329 break; 341 break;
330 default: 342 default: