- should use hash map to look up Neighbours (service AND plugins!)
* HOSTLIST:
- 'server' uses 'GNUNET_PEERINFO_iterate', should probably switch to notification API
- (for more instant / up-to-date hostlists at lower cost)
+ (for more instant / up-to-date hostlists at lower cost) [done by MW?]
* DATASTORE (?):
- check for duplicates on insertion (currently, same content is frequently
stored again [seen with KBLOCKS and SBLOCKS]!)
- [./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...
/*
This file is part of GNUnet
- (C) 2004, 2005, 2006, 2007, 2009 Christian Grothoff (and other contributing authors)
+ (C) 2004, 2005, 2006, 2007, 2009, 2010 Christian Grothoff (and other contributing authors)
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_datacache_lib.h"
+#include "gnunet_statistics_service.h"
#include "plugin_datacache.h"
/**
*/
const struct GNUNET_CONFIGURATION_Handle *cfg;
+ /**
+ * Opaque handle for the statistics service.
+ */
+ struct GNUNET_STATISTICS_Handle *stats;
+
/**
* Configuration section to use.
*/
GNUNET_assert (h->utilization >= size);
h->utilization -= size;
GNUNET_CONTAINER_bloomfilter_remove (h->filter, key);
+ GNUNET_STATISTICS_update (h->stats,
+ gettext_noop ("# bytes stored"),
+ -size,
+ GNUNET_NO);
}
{
ret->filter = GNUNET_CONTAINER_bloomfilter_load (NULL, bf_size, 5); /* approx. 3% false positives at max use */
}
+ ret->stats = GNUNET_STATISTICS_create (sched,
+ "datacache",
+ cfg);
ret->section = GNUNET_strdup (section);
ret->env.sched = sched;
ret->env.cfg = cfg;
h->bloom_name);
GNUNET_free (h->bloom_name);
}
+ GNUNET_STATISTICS_destroy (h->stats,
+ GNUNET_NO);
GNUNET_free (h);
}
discard_time);
if (used == 0)
return GNUNET_SYSERR;
+ GNUNET_STATISTICS_update (h->stats,
+ gettext_noop ("# bytes stored"),
+ size,
+ GNUNET_NO);
GNUNET_CONTAINER_bloomfilter_add (h->filter, key);
while (h->utilization + used > h->env.quota)
GNUNET_assert (GNUNET_OK == h->api->del (h->api->cls));
GNUNET_DATACACHE_Iterator iter,
void *iter_cls)
{
+ GNUNET_STATISTICS_update (h->stats,
+ gettext_noop ("# requests received"),
+ 1,
+ GNUNET_NO);
if (GNUNET_OK != GNUNET_CONTAINER_bloomfilter_test (h->filter,
key))
- return 0; /* can not be present */
+ {
+ GNUNET_STATISTICS_update (h->stats,
+ gettext_noop ("# requests filtered by bloom filter"),
+ 1,
+ GNUNET_NO);
+ return 0; /* can not be present */
+ }
return h->api->get (h->api->cls,
key,
type,