From: Christian Grothoff Date: Wed, 19 May 2010 21:45:22 +0000 (+0000) Subject: breaking FS big time, no idea why X-Git-Tag: initial-import-from-subversion-38251~21638 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=f8d5049cb6d34e401255ea44b43e822212710404;p=oweals%2Fgnunet.git breaking FS big time, no idea why --- diff --git a/src/fs/Makefile.am b/src/fs/Makefile.am index 6c850a91d..f287b6b31 100644 --- a/src/fs/Makefile.am +++ b/src/fs/Makefile.am @@ -143,7 +143,7 @@ check_SCRIPTS = \ test_gnunet_fs_idx.py endif -TESTS = $(check_SCRIPTS) \ +TESTS = \ test_fs_directory \ test_fs_download \ test_fs_download_persistence \ @@ -159,7 +159,8 @@ TESTS = $(check_SCRIPTS) \ test_fs_unindex_persistence \ test_fs_uri \ test_fs_test_lib \ - test_gnunet_service_fs_p2p + test_gnunet_service_fs_p2p \ + $(check_SCRIPTS) # $(check_PROGRAMS) diff --git a/src/fs/fs_test_lib.c b/src/fs/fs_test_lib.c index fba44eaeb..f2fb0ab74 100644 --- a/src/fs/fs_test_lib.c +++ b/src/fs/fs_test_lib.c @@ -180,6 +180,7 @@ progress_cb (void *cls, { struct GNUNET_FS_TestDaemon *daemon = cls; + fprintf (stderr, "PCB %d\n", info->status); switch (info->status) { case GNUNET_FS_STATUS_PUBLISH_COMPLETED: diff --git a/src/fs/fs_test_lib_data.conf b/src/fs/fs_test_lib_data.conf index 3f00352a7..ffe78fbb1 100644 --- a/src/fs/fs_test_lib_data.conf +++ b/src/fs/fs_test_lib_data.conf @@ -22,7 +22,6 @@ DEFAULTSERVICES = fs [datastore] #DEBUG = YES #PREFIX = valgrind --tool=memcheck --leak-check=yes -#BINARY = /home/grothoff/bin/gnunet-service-datastore [statistics] PORT = 43467 @@ -31,7 +30,6 @@ HOSTNAME = localhost [transport-tcp] TIMEOUT = 300000 #PORT = 43468 -#DEBUG = YES [peerinfo] PORT = 43469 @@ -51,10 +49,10 @@ TOTAL_QUOTA_OUT = 3932160 [fs] PORT = 43471 HOSTNAME = localhost -#OPTIONS = -L DEBUG +OPTIONS = -L DEBUG #DEBUG = YES -PREFIX = valgrind --tool=memcheck --leak-check=yes -#BINARY = /home/grothoff/bin/gnunet-service-fs +#PREFIX = valgrind --tool=memcheck --leak-check=yes +BINARY = /home/grothoff/bin/gnunet-service-fs #PREFIX = xterm -e gdb -x cmd --args [testing] diff --git a/src/fs/gnunet-service-fs.c b/src/fs/gnunet-service-fs.c index fb5b9c84c..a183336ee 100644 --- a/src/fs/gnunet-service-fs.c +++ b/src/fs/gnunet-service-fs.c @@ -44,7 +44,7 @@ #include "gnunet-service-fs_indexing.h" #include "fs.h" -#define DEBUG_FS GNUNET_NO +#define DEBUG_FS GNUNET_YES /** * Maximum number of outgoing messages we queue per peer. @@ -936,6 +936,10 @@ process_migration_content (void *cls, GNUNET_DATASTORE_get_next (dsh, GNUNET_YES); return; } + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Retrieved block `%s' of type %u for migration\n", + GNUNET_h2s (key), + type); mb = GNUNET_malloc (sizeof (struct MigrationReadyBlock) + size); mb->query = *key; mb->expiration = expiration; @@ -1509,7 +1513,7 @@ transmit_to_peer (void *cls, &pid.hashPubKey, cp); } -#if DEBUG_FS +#if DEBUG_FS > 3 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmitting %u bytes to peer %u\n", msize, @@ -2260,6 +2264,11 @@ struct ProcessReplyClosure * How much was this reply worth to us? */ uint32_t priority; + + /** + * Did we finish processing the associated request? + */ + int finished; }; @@ -2420,7 +2429,7 @@ process_reply (void *cls, } prq->priority += pr->remaining_priority; pr->remaining_priority = 0; - if (pr->client_request_list != NULL) + if (NULL != pr->client_request_list) { GNUNET_STATISTICS_update (stats, gettext_noop ("# replies received for local clients"), @@ -2456,7 +2465,10 @@ process_reply (void *cls, } GNUNET_break (cl->th != NULL); if (pr->do_remove) - destroy_pending_request (pr); + { + prq->finished = GNUNET_YES; + destroy_pending_request (pr); + } } else { @@ -2583,12 +2595,19 @@ handle_p2p_put (void *cls, prq.type = type; prq.expiration = expiration; prq.priority = 0; + prq.finished = GNUNET_NO; GNUNET_CONTAINER_multihashmap_get_multiple (query_request_map, &query, &process_reply, &prq); if (GNUNET_YES == active_migration) { +#if DEBUG_FS + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Replicating result for query `%s' with priority %u\n", + GNUNET_h2s (&query), + prq.priority); +#endif GNUNET_DATASTORE_put (dsh, 0, &query, dsize, &put[1], type, prq.priority, 1 /* anonymity */, @@ -2814,13 +2833,21 @@ process_local_reply (void *cls, GNUNET_DATASTORE_get_next (dsh, GNUNET_YES); return; } + prq.type = type; + prq.priority = priority; + prq.finished = GNUNET_NO; + process_reply (&prq, key, pr); + if (prq.finished == GNUNET_YES) + return; + if (pr->qe == NULL) + return; /* done here */ if ( (type == GNUNET_BLOCK_TYPE_DBLOCK) || (type == GNUNET_BLOCK_TYPE_IBLOCK) ) { - if (pr->qe != NULL) - GNUNET_DATASTORE_get_next (dsh, GNUNET_NO); + GNUNET_DATASTORE_get_next (dsh, GNUNET_NO); + return; } - else if ( (pr->client_request_list == NULL) && + if ( (pr->client_request_list == NULL) && ( (GNUNET_YES == test_load_too_high()) || (pr->results_found > 5 + 2 * pr->priority) ) ) { @@ -2832,14 +2859,10 @@ process_local_reply (void *cls, gettext_noop ("# processing result set cut short due to load"), 1, GNUNET_NO); - if (pr->qe != NULL) - GNUNET_DATASTORE_get_next (dsh, GNUNET_NO); + GNUNET_DATASTORE_get_next (dsh, GNUNET_NO); + return; } - else if (pr->qe != NULL) - GNUNET_DATASTORE_get_next (dsh, GNUNET_YES); - prq.type = type; - prq.priority = priority; - process_reply (&prq, key, pr); + GNUNET_DATASTORE_get_next (dsh, GNUNET_YES); } @@ -3062,7 +3085,7 @@ handle_p2p_get (void *cls, gettext_noop ("# requests dropped due TTL underflow"), 1, GNUNET_NO); - /* integer underflow => drop (should be very rare)! */ + /* integer underflow => drop (should be very rare)! */ GNUNET_free (pr); return GNUNET_OK; } diff --git a/src/fs/gnunet-service-fs_indexing.c b/src/fs/gnunet-service-fs_indexing.c index 6c44f8e2f..39999be75 100644 --- a/src/fs/gnunet-service-fs_indexing.c +++ b/src/fs/gnunet-service-fs_indexing.c @@ -40,7 +40,7 @@ #include "gnunet-service-fs_indexing.h" #include "fs.h" -#define DEBUG_FS GNUNET_NO +#define DEBUG_FS GNUNET_YES /** * In-memory information about indexed files (also available @@ -367,6 +367,13 @@ GNUNET_FS_handle_index_start (void *cls, ii->filename = (const char*) &ii[1]; memcpy (&ii[1], fn, slen); ii->file_id = ism->file_id; +#if DEBUG_FS + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Received `%s' message for file `%s'\n", + "START_INDEX", + ii->filename); +#endif + ii->tc = GNUNET_SERVER_transmit_context_create (client); mydev = 0; myino = 0; @@ -610,8 +617,9 @@ GNUNET_FS_handle_on_demand_block (const GNUNET_HashCode * key, sizeof (ndata)))) ) { GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Could not access indexed file `%s' at offset %llu: %s\n"), + _("Could not access indexed file `%s' (%s) at offset %llu: %s\n"), GNUNET_h2s (&odb->file_id), + fn, (unsigned long long) off, STRERROR (errno)); if (fh != NULL) diff --git a/src/fs/test_fs_list_indexed_data.conf b/src/fs/test_fs_list_indexed_data.conf index 9f717b2e0..84a03a3c0 100644 --- a/src/fs/test_fs_list_indexed_data.conf +++ b/src/fs/test_fs_list_indexed_data.conf @@ -36,7 +36,7 @@ HOSTNAME = localhost [fs] PORT = 42471 HOSTNAME = localhost -#DEBUG = YES +# DEBUG = YES [testing] WEAKRANDOM = YES diff --git a/src/fs/test_gnunet_service_fs_p2p.c b/src/fs/test_gnunet_service_fs_p2p.c index 7e3e02c76..92ac44dcc 100644 --- a/src/fs/test_gnunet_service_fs_p2p.c +++ b/src/fs/test_gnunet_service_fs_p2p.c @@ -26,7 +26,7 @@ #include "platform.h" #include "fs_test_lib.h" -#define VERBOSE GNUNET_NO +#define VERBOSE GNUNET_YES /** * File-size we use for testing.