From abda55f7008cee983bda0fe4c78076978feddbf3 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sun, 22 Jan 2017 11:34:02 +0100 Subject: [PATCH] optimize startup sequence for when we execute first DHT PUTs --- src/cadet/gnunet-service-cadet-new_dht.c | 40 +++++++++++++++++++--- src/cadet/gnunet-service-cadet-new_dht.h | 7 ++++ src/cadet/gnunet-service-cadet-new_hello.c | 2 ++ 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/cadet/gnunet-service-cadet-new_dht.c b/src/cadet/gnunet-service-cadet-new_dht.c index 981553601..849562f23 100644 --- a/src/cadet/gnunet-service-cadet-new_dht.c +++ b/src/cadet/gnunet-service-cadet-new_dht.c @@ -34,6 +34,22 @@ #include "gnunet-service-cadet-new_peer.h" #include "gnunet-service-cadet-new_paths.h" +/** + * How long do we wait before first announcing our presence to the DHT. + * Used to wait for our HELLO to be available. Note that we also get + * notifications when our HELLO is ready, so this is just the maximum + * we wait for the first notification. + */ +#define STARTUP_DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 500) + +/** + * How long do we wait after we get an updated HELLO before publishing? + * Allows for the HELLO to be updated again quickly, for example in + * case multiple addresses changed and we got a partial update. + */ +#define CHANGE_DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 100) + + #define LOG(level, ...) GNUNET_log_from (level,"cadet-dht",__VA_ARGS__) @@ -194,6 +210,23 @@ announce_id (void *cls) } +/** + * Function called by the HELLO subsystem whenever OUR hello + * changes. Re-triggers the DHT PUT immediately. + */ +void +GCD_hello_update () +{ + if (NULL == announce_id_task) + return; /* too early */ + GNUNET_SCHEDULER_cancel (announce_id_task); + announce_id_task + = GNUNET_SCHEDULER_add_delayed (CHANGE_DELAY, + &announce_id, + NULL); +} + + /** * Initialize the DHT subsystem. * @@ -202,8 +235,6 @@ announce_id (void *cls) void GCD_init (const struct GNUNET_CONFIGURATION_Handle *c) { - LOG (GNUNET_ERROR_TYPE_DEBUG, - "init\n"); if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (c, "CADET", @@ -235,8 +266,9 @@ GCD_init (const struct GNUNET_CONFIGURATION_Handle *c) 64); GNUNET_break (NULL != dht_handle); announce_delay = GNUNET_TIME_UNIT_SECONDS; - announce_id_task = GNUNET_SCHEDULER_add_now (&announce_id, - NULL); + announce_id_task = GNUNET_SCHEDULER_add_delayed (STARTUP_DELAY, + &announce_id, + NULL); } diff --git a/src/cadet/gnunet-service-cadet-new_dht.h b/src/cadet/gnunet-service-cadet-new_dht.h index 81f16ae99..5d7ab29a0 100644 --- a/src/cadet/gnunet-service-cadet-new_dht.h +++ b/src/cadet/gnunet-service-cadet-new_dht.h @@ -62,6 +62,13 @@ void GCD_shutdown (void); +/** + * Function called by the HELLO subsystem whenever OUR hello + * changes. Re-triggers the DHT PUT immediately. + */ +void +GCD_hello_update (void); + /** * Search DHT for paths to @a peeR_id * diff --git a/src/cadet/gnunet-service-cadet-new_hello.c b/src/cadet/gnunet-service-cadet-new_hello.c index 7c8ba3b25..a24325ada 100644 --- a/src/cadet/gnunet-service-cadet-new_hello.c +++ b/src/cadet/gnunet-service-cadet-new_hello.c @@ -34,6 +34,7 @@ #include "gnunet_peerinfo_service.h" #include "cadet_protocol.h" #include "gnunet-service-cadet-new.h" +#include "gnunet-service-cadet-new_dht.h" #include "gnunet-service-cadet-new_hello.h" #include "gnunet-service-cadet-new_peer.h" @@ -80,6 +81,7 @@ got_hello (void *cls, { GNUNET_free_non_null (mine); mine = (struct GNUNET_HELLO_Message *) GNUNET_copy_message (&hello->header); + GCD_hello_update (); return; } -- 2.25.1