X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=TODO;h=c9141e21fc688b69e0d3d02742d5e45c8f3a0ac3;hb=7eb4b4b3ab14ef6433b08cca8c673d00f8405062;hp=6c9e18429ffad3247a84f8f2a2fb955545773f49;hpb=b0d073db4d1f0006ec1d6a7152c7543c80cea268;p=oweals%2Fgnunet.git diff --git a/TODO b/TODO index 6c9e18429..c9141e21f 100644 --- a/TODO +++ b/TODO @@ -1,66 +1,17 @@ 0.9.0pre1: -* PEERINFO: - - trust: need *fast* way to check/update trust in peers - (async peerinfo would not be right; certainly not with the - current API) -* UTIL: - - scheduler should change OS process priority based on task priority; - should make better use of task priorities in general - - only connect() sockets that are ready (select()) [Nils] - [On W32, we need to select after calling socket before - doing connect etc.] -* SETUP: - - design & implement new setup tool -* TBENCH: [MW] - - good to have for transport/DV evaluation! -* DV: [Nate] - - write DV API (need to move declarations from dv_api.c to gnunet_dv_service.h!) - - implement DV service - - implement DV library (looks done) - - implement DV transport plugin - - implement testcases - - implement performance tests -* STATISTICS: - - does not seem to work with timeouts (especially if service is not running) -* TOPOLOGY: - - needs more testing (especially F2F topology) - - needs to re-try connecting after disconnect (currently, it - initially triggers a connection request, but if that connection - fails / goes down, it does not retry in a timely fashion; - cause seems to be the 'blacklist_after_attempt' being set to 1h, - which is rather long -- and should probably be adjusted based on - the number of connections / known peers) - - If the topology daemon crashes, peers that were put on the - blacklist with transport will never be removed from it (until - transport service dies); we should use the blacklist notification - API to learn about the exact set of blacklisted peers at all times - (FIXME: the transport_api implementation of blacklisting - also does not work nicely for this since it won't let us know about - disconnect-reconnect events and the implicit whitelisting - that might happen here; that's not so bad since we will - re-blacklist on pre-connect attempts anyway, so this is - a minor issue; OTOH, we might want to be more explicit about - allowing/forbidding connects on pre-connect to avoid - entering connect attempts to just be blacklisted shortly afterwards). - - the code uses the term 'blacklist' for both peers that are forbidden - to connect (i.e. F2F mode) as well as peers that we currently - won't try to actively connect to ourselves (since we just tried); - This is confusing. We need two distinct terms (greylist?). - - move code to use hash table instead of linked list - - instead of periodically discarding blacklisted entries, - simply add task that is triggered at the right time (earlier free, - more balanced load) - - check if new HELLO learned is different from old HELLO - before resetting entire state! * FS: [CG] - - support recursive download even if filename is NULL and we hence - do not generate files on disk (use temp_filename) - - bound parallelism (# fs downloads) - - distinguish in performance tracking and event signalling between - downloads that are actually running and those that are merely in the queue - - persistence support (publish, unindex, search, download) - - active migration support (in fs or in datastore or new daemon?) - - gnunet-service-fs (hot-path routing, load-based routing, nitpicks) + - implement linking of downloads to searches in syncing (serialize/deserialize) + - generate SUSPEND events (publish, unindex, search, download) AND free memory! + => test SUSPEND events + - actually call 'sync' functions (publish, unindex, search, download) + - code review: + => refactor fs.c to join common code segments! + => document directory structure (and use #define's for the directory names!) + => ensure all files & dirs are cleaned up! (at least during 'clean' runs) + - persistence testing (publish, unindex, search, download): + => need driver! + => schedule suspending tasks DURING event handler => good coverage! + - gnunet-service-fs (hot-path routing, load-based routing, nitpicks) - [gnunet-service-fs.c:208]: member 'LocalGetContext::results_bf_size' is never used - [gnunet-service-fs.c:501]: member 'PendingRequest::used_pids_size' is never used - [gnunet-service-fs.c:654]: member 'ConnectedPeer::last_client_replies' is never used @@ -71,25 +22,46 @@ - [gnunet-service-fs.c:700]: member 'ConnectedPeer::last_client_replies_woff' is never used - GAP improvements: + active reply route caching design & implementation of service; gap extension! -* DATASTORE: - - API lacks cancellation methods (needed? or is disconnect enough?); - may also want to integrate request queuing here instead of gnunet-service-fs_drq.c +* MIGRATION [CG] + - on-demand encoding => move logic to block-library!? + - peer selection => how to consider latency/bw/etc? + - content transmission => how often the same block? + - how to select delay before next migration? + - migration to us + - testing + - integrate with FS or not? (peer list, index/on-demand encoding, block code, + inbound priority assignment; all would be easier with tight integration!) +* TBENCH: [MW] + - good to have for transport/DV evaluation! +* DV: [Nate] + - write DV API (need to move declarations from dv_api.c to gnunet_dv_service.h!) + - implement DV service + - implement DV library (looks done) + - implement DV transport plugin + - implement testcases + - implement performance tests (needs tbench) +* TOPOLOGY: + - needs more testing (especially F2F topology) & transport blacklisting +* UTIL: + - only connect() sockets that are ready (select()) [Nils] + [On W32, we need to select after calling socket before doing connect etc.] * GNUNET-GTK: - use g_main_context_set_poll_func to integrate GTK with GNUnet Scheduler!? (YUCK!) - OR: add scheduler API to enable integration with GTK main loop instead of doing our own select - use g_main_context_pending, g_main_context_query / g_main_context_check / g_main_context_dispatch and NEVER g_main_loop_run (can this be done? might be the clean way to do this! But how - to integrate this with "tak_main"? Docu says: + to integrate this with "gtk_main"? Docu says: "It's OK to use the GLib main loop directly instead of gtk_main(), though it involves slightly more typing. See GMainLoop in the GLib documentation." => so maybe it "just works"? +* SETUP: + - design & implement new setup tool 0.9.0pre2: * TRACEKIT: [MW] - good to have for DV/DHT evaluation! * DHT: [Nate] - implement DHT service - - implement DHT library - implement testcases - implement performance tests * TRANSPORT: @@ -105,8 +77,10 @@ - shutdown sequence? * FS: [CG] - datastore reservation (publishing) - - search: availability probes - location URIs (publish, search, download) + - utilize in-line files in meta data always (including in search results or + when download is triggered manually and for probes); currently the data is + only used when users do a general 'recursive' download - non-anonymous FS service (needs DHT) + DHT integration for search + CS-DHT-functions (DHT-put of LOC) @@ -118,6 +92,8 @@ + download + search + unindex +* MIGRATION: + - improved content selection (not just 'get_random') 0.9.0pre3: * Determine RC bugs and fix those! @@ -139,6 +115,9 @@ * MYSQL database backends: [CG] - datacache - datastore +* FS: + - reconstruct IBLOCKS from DBLOCKS if possible (during download; see FIXME in fs_download) + 0.9.0: * new webpage: @@ -146,8 +125,7 @@ - convert documentation pages to books - update books (especially for developers) - create good Drupal theme for GNUnet - - make a NICE download page and figure out how to - enable developers to publish TGZs nicely + - make a NICE download page and figure out how to enable developers to publish TGZs nicely - port "contact" page - add content type for "todo" items? * POSTGRES database backends: [CG] @@ -181,8 +159,6 @@ (Note: build library always, build service when libxml2/etc. are available) * FS: [CG] - Remove KBlocks in gnunet-unindex (see discussion with Kenneth Almquist on gnunet-devs in 9/2009) - - Allow checking of presence of search results and/or content via command-line tools - (add options to gnunet-search / gnunet-download to limit search to local peer) * PEERINFO: [CG] - expire 'ancient' HELLOs (those without valid addresses AND that we have not 'used' (for their public keys) in a while; need a way @@ -195,26 +171,21 @@ Optimizations: * TCP: - should use hash map to look up sessions -* PEERINFO: - - api creates many, many short-lived TCP connections; either some - clients should use the API differently or we need to change the - API to enable re-use of connections to the service * STATISTICS: - should use BIO instead of mmap * TRANSPORT: - need to periodically probe latency/transport cost changes & possibly switch transport - - instantly filter addresses from *other* peers that - are *equal* to our own address + port (i.e., localhost:2086). We - no longer filter those for outgoing (helps with loopback testing - and keeps the code clean), but we should filter strictly *impossible* - incoming addresses! This is for efficiency, not correctness. - - should use hash map to look up Neighbours -* HOSTLIST: - - 'server' uses 'GNUNET_PEERINFO_iterate', should probably switch to notification API - (for more instant / up-to-date hostlists at lower cost) [OPTIMIZATION] + - should use hash map to look up Neighbours (service AND plugins!) * DATASTORE (?): - check for duplicates on insertion (currently, same content is frequently stored again [seen with KBLOCKS and SBLOCKS]!) +* PEERINFO: + - merge multiple HELLOs of the same peer in the transmission queue + (theoretically reduces overhead; bounds message queue size) + - merge multiple iteration requests over "all" peers in the queue + (theoretically reduces overhead; bounds messgae queue size) +* FS: + - use different queue prioritization for probe-downloads vs. normal downloads (!?) Minor features: * TCP: @@ -222,8 +193,5 @@ Minor features: - [./transport/plugin_transport_tcp.c:391]: (style) struct or union member 'Plugin::address_update_task' is never used (related to issue above) * TRANSPORT: - [./transport/gnunet-service-transport.c:173]: (style) struct or union member 'TransportPlugin::rebuild' is never used (related to TCP not refreshing external addresses?) -* DATACACHE: - - add stats (# bytes available, # bytes used, # PUTs, # GETs, # GETs satisfied) -* FS: - - support inline data in directories for recursive file downloads (fs_download) - +* BLOCKS: + - testcase would be nice...