"Starting job %p (%u active)\n",
qe,
qe->h->active_downloads);
- GNUNET_CONTAINER_DLL_remove (qe->h->pending_head, qe->h->pending_tail, qe);
- GNUNET_CONTAINER_DLL_insert_after (qe->h->running_head, qe->h->running_tail,
- qe->h->running_tail, qe);
+ GNUNET_CONTAINER_DLL_remove (qe->h->pending_head,
+ qe->h->pending_tail,
+ qe);
+ GNUNET_CONTAINER_DLL_insert_after (qe->h->running_head,
+ qe->h->running_tail,
+ qe->h->running_tail,
+ qe);
}
num_downloads_expired,
num_downloads_waiting);
/* calculate start/stop decisions */
- if (h->active_downloads + num_downloads_waiting > h->max_parallel_requests)
+ if (h->active_downloads + num_downloads_waiting > h->max_parallel_downloads)
{
- /* stop probes if possible */
- num_probes_change = - num_probes_active;
- num_downloads_change = h->max_parallel_requests - h->active_downloads;
+ /* stop as many probes as there are downloads and probes */
+ num_probes_change = - GNUNET_MIN (num_probes_active,
+ num_downloads_waiting);
+ /* start as many downloads as there are free slots, including those
+ we just opened up */
+ num_downloads_change = h->max_parallel_downloads - h->active_downloads - num_probes_change;
}
else
{
- /* start all downloads */
+ /* start all downloads (we can) */
num_downloads_change = num_downloads_waiting;
- /* start as many probes as we can */
- num_probes_change = GNUNET_MIN (num_probes_waiting,
- h->max_parallel_requests - (h->active_downloads + num_downloads_waiting));
+ /* also start probes if there is room, but use a lower cap of (mpd/4) + 1 */
+ if (h->max_parallel_downloads / 2 >= (h->active_downloads + num_downloads_change))
+ num_probes_change = GNUNET_MIN (num_probes_waiting,
+ (1 + h->max_parallel_downloads / 4) - (h->active_downloads + num_downloads_change));
+ else
+ num_probes_change = 0;
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
char b;
char *ksks;
char *chks;
+ char *skss;
char *filename;
uint32_t dsize;
ret->h = h;
ksks = NULL;
chks = NULL;
+ skss = NULL;
filename = NULL;
if ((GNUNET_OK != GNUNET_BIO_read_meta_data (rh, "metadata", &ret->meta)) ||
(GNUNET_OK != GNUNET_BIO_read_string (rh, "ksk-uri", &ksks, 32 * 1024)) ||
( (NULL != chks) &&
( (NULL == (ret->chk_uri = GNUNET_FS_uri_parse (chks, NULL))) ||
(GNUNET_YES != GNUNET_FS_uri_test_chk (ret->chk_uri))) ) ||
+ (GNUNET_OK != GNUNET_BIO_read_string (rh, "sks-uri", &skss, 1024)) ||
+ ( (NULL != skss) &&
+ ( (NULL == (ret->sks_uri = GNUNET_FS_uri_parse (skss, NULL))) ||
+ (GNUNET_YES != GNUNET_FS_uri_test_sks (ret->sks_uri))) ) ||
(GNUNET_OK != read_start_time (rh, &ret->start_time)) ||
(GNUNET_OK != GNUNET_BIO_read_string (rh, "emsg", &ret->emsg, 16 * 1024))
|| (GNUNET_OK !=
filename = NULL;
}
GNUNET_free_non_null (ksks);
+ GNUNET_free_non_null (skss);
GNUNET_free_non_null (chks);
return ret;
cleanup:
GNUNET_free_non_null (ksks);
GNUNET_free_non_null (chks);
+ GNUNET_free_non_null (skss);
GNUNET_free_non_null (filename);
GNUNET_FS_file_information_destroy (ret, NULL, NULL);
return NULL;
char b;
char *ksks;
char *chks;
+ char *skss;
if (NULL == fi->serialization)
fi->serialization =
chks = GNUNET_FS_uri_to_string (fi->chk_uri);
else
chks = NULL;
+ if (NULL != fi->sks_uri)
+ skss = GNUNET_FS_uri_to_string (fi->sks_uri);
+ else
+ skss = NULL;
if ((GNUNET_OK != GNUNET_BIO_write (wh, &b, sizeof (b))) ||
(GNUNET_OK != GNUNET_BIO_write_meta_data (wh, fi->meta)) ||
(GNUNET_OK != GNUNET_BIO_write_string (wh, ksks)) ||
(GNUNET_OK != GNUNET_BIO_write_string (wh, chks)) ||
+ (GNUNET_OK != GNUNET_BIO_write_string (wh, skss)) ||
(GNUNET_OK != write_start_time (wh, fi->start_time)) ||
(GNUNET_OK != GNUNET_BIO_write_string (wh, fi->emsg)) ||
(GNUNET_OK != GNUNET_BIO_write_string (wh, fi->filename)) ||
chks = NULL;
GNUNET_free_non_null (ksks);
ksks = NULL;
+ GNUNET_free_non_null (skss);
+ skss = NULL;
switch (b)
{
(void) GNUNET_BIO_write_close (wh);
GNUNET_free_non_null (chks);
GNUNET_free_non_null (ksks);
+ GNUNET_free_non_null (skss);
fn = get_serialization_file_name (fi->h, GNUNET_FS_SYNC_PATH_FILE_INFO,
fi->serialization);
if (NULL != fn)
}
sc->h = h;
sc->serialization = GNUNET_strdup (serialization);
- if ((GNUNET_OK != GNUNET_BIO_read_string (rh, "search-uri", &uris, 10 * 1024))
- || (NULL == (sc->uri = GNUNET_FS_uri_parse (uris, &emsg))) ||
+ if ((GNUNET_OK !=
+ GNUNET_BIO_read_string (rh, "search-uri", &uris, 10 * 1024)) ||
+ (NULL == (sc->uri = GNUNET_FS_uri_parse (uris, &emsg))) ||
((GNUNET_YES != GNUNET_FS_uri_test_ksk (sc->uri)) &&
(GNUNET_YES != GNUNET_FS_uri_test_sks (sc->uri))) ||
(GNUNET_OK != read_start_time (rh, &sc->start_time)) ||
sc->options = (enum GNUNET_FS_SearchOptions) options;
sc->master_result_map = GNUNET_CONTAINER_multihashmap_create (16, GNUNET_NO);
dn = get_serialization_file_name_in_dir (h,
- (sc->psearch_result ==
- NULL) ?
+ (NULL == sc->psearch_result) ?
GNUNET_FS_SYNC_PATH_MASTER_SEARCH :
GNUNET_FS_SYNC_PATH_CHILD_SEARCH,
sc->serialization, "");