[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet] 02/02: PEERSTORE: Simplify API such that we no longer get caugh
From: |
gnunet |
Subject: |
[gnunet] 02/02: PEERSTORE: Simplify API such that we no longer get caught in while loops |
Date: |
Wed, 22 Nov 2023 19:02:09 +0100 |
This is an automated email from the git hooks/post-receive script.
martin-schanzenbach pushed a commit to branch master
in repository gnunet.
commit aa395c1bce6e3f70e20c0d78693cd4064b6d6a79
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Wed Nov 22 19:01:35 2023 +0100
PEERSTORE: Simplify API such that we no longer get caught in while loops
---
contrib/gana | 2 +-
src/include/gnunet_peerstore_service.h | 8 +-
src/service/cadet/gnunet-service-cadet_hello.c | 2 +-
src/service/dhtu/plugin_dhtu_gnunet.c | 2 +-
src/service/fs/gnunet-service-fs_cp.c | 3 +-
.../hostlist/gnunet-daemon-hostlist_client.c | 2 +-
.../hostlist/gnunet-daemon-hostlist_server.c | 2 +-
src/service/peerstore/peerstore_api.c | 128 ++++++++-------------
src/service/topology/gnunet-daemon-topology.c | 2 +-
src/service/transport/gnunet-communicator-tcp.c | 2 +-
src/service/transport/gnunet-service-transport.c | 2 +-
src/service/transport/transport-testing2.c | 2 +-
.../transport/transport_api_cmd_stop_peer.c | 2 +-
13 files changed, 63 insertions(+), 96 deletions(-)
diff --git a/contrib/gana b/contrib/gana
index c1dc2dc97..840792da1 160000
--- a/contrib/gana
+++ b/contrib/gana
@@ -1 +1 @@
-Subproject commit c1dc2dc975742c929a523c22d91f7d4f82787230
+Subproject commit 840792da1b88e826a178df77a48f42b0b58a2570
diff --git a/src/include/gnunet_peerstore_service.h
b/src/include/gnunet_peerstore_service.h
index c57a66b1f..966abb7a6 100644
--- a/src/include/gnunet_peerstore_service.h
+++ b/src/include/gnunet_peerstore_service.h
@@ -337,15 +337,13 @@ GNUNET_PEERSTORE_connect (const struct
GNUNET_CONFIGURATION_Handle *cfg);
/**
- * Disconnect from the PEERSTORE service. Any pending ITERATE and WATCH
requests
- * will be canceled.
- * Any pending STORE requests will depend on @e snyc_first flag.
+ * Disconnect from the PEERSTORE service. Any pending ITERATE and WATCH and
+ * STORE requests will be canceled.
*
* @param h handle to disconnect
- * @param sync_first send any pending STORE requests before disconnecting
*/
void
-GNUNET_PEERSTORE_disconnect (struct GNUNET_PEERSTORE_Handle *h, int
sync_first);
+GNUNET_PEERSTORE_disconnect (struct GNUNET_PEERSTORE_Handle *h);
/**
diff --git a/src/service/cadet/gnunet-service-cadet_hello.c
b/src/service/cadet/gnunet-service-cadet_hello.c
index 3c8509ea4..ac84fab1e 100644
--- a/src/service/cadet/gnunet-service-cadet_hello.c
+++ b/src/service/cadet/gnunet-service-cadet_hello.c
@@ -128,7 +128,7 @@ GCH_shutdown ()
}
if (NULL != peerstore)
{
- GNUNET_PEERSTORE_disconnect (peerstore, GNUNET_YES);
+ GNUNET_PEERSTORE_disconnect (peerstore);
peerstore = NULL;
}
if (NULL != mine)
diff --git a/src/service/dhtu/plugin_dhtu_gnunet.c
b/src/service/dhtu/plugin_dhtu_gnunet.c
index 1c56be0e5..7c02fdd15 100644
--- a/src/service/dhtu/plugin_dhtu_gnunet.c
+++ b/src/service/dhtu/plugin_dhtu_gnunet.c
@@ -540,7 +540,7 @@ libgnunet_plugin_dhtu_gnunet_done (void *cls)
if (NULL != plugin->peerstore_notify)
GNUNET_PEERSTORE_hello_changed_notify_cancel (plugin->peerstore_notify);
if (NULL != plugin->peerstore)
- GNUNET_PEERSTORE_disconnect (plugin->peerstore, GNUNET_YES);
+ GNUNET_PEERSTORE_disconnect (plugin->peerstore);
//GPI_plugins_unload ();
GNUNET_free (plugin->my_priv);
GNUNET_free (plugin);
diff --git a/src/service/fs/gnunet-service-fs_cp.c
b/src/service/fs/gnunet-service-fs_cp.c
index 74dd42daf..b2b73d0a5 100644
--- a/src/service/fs/gnunet-service-fs_cp.c
+++ b/src/service/fs/gnunet-service-fs_cp.c
@@ -1610,8 +1610,7 @@ GSF_connected_peer_done_ ()
fr_task = NULL;
GNUNET_CONTAINER_multipeermap_destroy (cp_map);
cp_map = NULL;
- GNUNET_PEERSTORE_disconnect (peerstore,
- GNUNET_YES);
+ GNUNET_PEERSTORE_disconnect (peerstore);
}
diff --git a/src/service/hostlist/gnunet-daemon-hostlist_client.c
b/src/service/hostlist/gnunet-daemon-hostlist_client.c
index bedc52612..2a03caaac 100644
--- a/src/service/hostlist/gnunet-daemon-hostlist_client.c
+++ b/src/service/hostlist/gnunet-daemon-hostlist_client.c
@@ -1814,7 +1814,7 @@ GNUNET_HOSTLIST_client_stop ()
proxy_password = NULL;
if (NULL != peerstore)
{
- GNUNET_PEERSTORE_disconnect (peerstore, GNUNET_YES);
+ GNUNET_PEERSTORE_disconnect (peerstore);
peerstore = NULL;
}
cfg = NULL;
diff --git a/src/service/hostlist/gnunet-daemon-hostlist_server.c
b/src/service/hostlist/gnunet-daemon-hostlist_server.c
index dd4f435a1..d2ef8dd7a 100644
--- a/src/service/hostlist/gnunet-daemon-hostlist_server.c
+++ b/src/service/hostlist/gnunet-daemon-hostlist_server.c
@@ -876,7 +876,7 @@ GNUNET_HOSTLIST_server_stop ()
}
if (NULL != peerstore)
{
- GNUNET_PEERSTORE_disconnect (peerstore, GNUNET_YES);
+ GNUNET_PEERSTORE_disconnect (peerstore);
peerstore = NULL;
}
cfg = NULL;
diff --git a/src/service/peerstore/peerstore_api.c
b/src/service/peerstore/peerstore_api.c
index 9014193c7..3dec7e01b 100644
--- a/src/service/peerstore/peerstore_api.c
+++ b/src/service/peerstore/peerstore_api.c
@@ -86,10 +86,6 @@ struct GNUNET_PEERSTORE_Handle
*/
struct GNUNET_TIME_Relative reconnect_delay;
- /**
- * Are we in the process of disconnecting but need to sync first?
- */
- int disconnecting;
};
/**
@@ -464,25 +460,6 @@ destroy_watch (void *cls, const struct GNUNET_HashCode
*key, void *value)
}
-/**
- * Kill the connection to the service. This can be delayed in case of pending
- * STORE requests and the user explicitly asked to sync first. Otherwise it is
- * performed instantly.
- *
- * @param h Handle to the service.
- */
-static void
-final_disconnect (struct GNUNET_PEERSTORE_Handle *h)
-{
- if (NULL != h->mq)
- {
- GNUNET_MQ_destroy (h->mq);
- h->mq = NULL;
- }
- GNUNET_free (h);
-}
-
-
/**
* Connect to the PEERSTORE service.
*
@@ -496,7 +473,6 @@ GNUNET_PEERSTORE_connect (const struct
GNUNET_CONFIGURATION_Handle *cfg)
h = GNUNET_new (struct GNUNET_PEERSTORE_Handle);
h->cfg = cfg;
- h->disconnecting = GNUNET_NO;
reconnect (h);
if (NULL == h->mq)
{
@@ -513,10 +489,9 @@ GNUNET_PEERSTORE_connect (const struct
GNUNET_CONFIGURATION_Handle *cfg)
* Any pending STORE requests will depend on @e snyc_first flag.
*
* @param h handle to disconnect
- * @param sync_first send any pending STORE requests before disconnecting
*/
void
-GNUNET_PEERSTORE_disconnect (struct GNUNET_PEERSTORE_Handle *h, int sync_first)
+GNUNET_PEERSTORE_disconnect (struct GNUNET_PEERSTORE_Handle *h)
{
struct GNUNET_PEERSTORE_IterateContext *ic;
struct GNUNET_PEERSTORE_StoreContext *sc;
@@ -533,19 +508,12 @@ GNUNET_PEERSTORE_disconnect (struct
GNUNET_PEERSTORE_Handle *h, int sync_first)
GNUNET_break (0);
GNUNET_PEERSTORE_iterate_cancel (ic);
}
- if (NULL != h->store_head)
+ while (NULL != (sc = h->store_head))
{
- if (GNUNET_YES == sync_first)
- {
- LOG (GNUNET_ERROR_TYPE_DEBUG,
- "Delaying disconnection due to pending store requests.\n");
- h->disconnecting = GNUNET_YES;
- return;
- }
- while (NULL != (sc = h->store_head))
- GNUNET_PEERSTORE_store_cancel (sc);
+ GNUNET_break (0);
+ GNUNET_PEERSTORE_store_cancel (sc);
}
- final_disconnect (h);
+ disconnect (h);
}
@@ -562,8 +530,6 @@ GNUNET_PEERSTORE_disconnect (struct GNUNET_PEERSTORE_Handle
*h, int sync_first)
void
GNUNET_PEERSTORE_store_cancel (struct GNUNET_PEERSTORE_StoreContext *sc)
{
- struct GNUNET_PEERSTORE_Handle *h = sc->h;
-
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"store cancel with sc %p \n",
sc);
@@ -575,8 +541,6 @@ GNUNET_PEERSTORE_store_cancel (struct
GNUNET_PEERSTORE_StoreContext *sc)
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"store cancel with sc %p is null\n",
sc);
- if ((GNUNET_YES == h->disconnecting) && (NULL == h->store_head))
- final_disconnect (h);
}
@@ -751,15 +715,15 @@ handle_iterate_result (void *cls, const struct
StoreRecordMessage *msg)
void
GNUNET_PEERSTORE_iterate_cancel (struct GNUNET_PEERSTORE_IterateContext *ic)
{
- if (GNUNET_NO == ic->iterating)
+ if (GNUNET_YES == ic->iterating)
{
- GNUNET_CONTAINER_DLL_remove (ic->h->iterate_head, ic->h->iterate_tail, ic);
- GNUNET_free (ic->sub_system);
- GNUNET_free (ic->key);
- GNUNET_free (ic);
+ if (NULL != ic->callback)
+ ic->callback (ic->callback_cls, NULL, "Iteration canceled due to
reconnection");
}
- else
- ic->callback = NULL;
+ GNUNET_CONTAINER_DLL_remove (ic->h->iterate_head, ic->h->iterate_tail, ic);
+ GNUNET_free (ic->sub_system);
+ GNUNET_free (ic->key);
+ GNUNET_free (ic);
}
@@ -965,8 +929,8 @@ GNUNET_PEERSTORE_watch_cancel (struct
GNUNET_PEERSTORE_WatchContext *wc)
static void
watch_iterate (void *cls,
- const struct GNUNET_PEERSTORE_Record *record,
- const char *emsg)
+ const struct GNUNET_PEERSTORE_Record *record,
+ const char *emsg)
{
struct GNUNET_PEERSTORE_WatchContext *wc = cls;
struct GNUNET_PEERSTORE_Handle *h = wc->h;
@@ -1053,11 +1017,11 @@ GNUNET_PEERSTORE_watch (struct GNUNET_PEERSTORE_Handle
*h,
wc->sub_system = sub_system;
wc->ic = GNUNET_PEERSTORE_iterate (h,
- sub_system,
- peer,
- key,
- &watch_iterate,
- wc);
+ sub_system,
+ peer,
+ key,
+ &watch_iterate,
+ wc);
return wc;
}
@@ -1091,7 +1055,8 @@ hello_updated (void *cls,
hello = record->value;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"hello_updated with expired %s and size %u for peer %s\n",
- GNUNET_STRINGS_absolute_time_to_string
(GNUNET_HELLO_builder_get_expiration_time (hello)),
+ GNUNET_STRINGS_absolute_time_to_string (
+ GNUNET_HELLO_builder_get_expiration_time (hello)),
ntohs (hello->size),
GNUNET_i2s (&record->peer));
if ((0 == record->value_size))
@@ -1119,11 +1084,11 @@ GNUNET_PEERSTORE_hello_changed_notify (struct
GNUNET_PEERSTORE_Handle *h,
nc->h = h;
nc->wc = GNUNET_PEERSTORE_watch (h,
- "peerstore",
- NULL,
- GNUNET_PEERSTORE_HELLO_KEY,
- &hello_updated,
- nc);
+ "peerstore",
+ NULL,
+ GNUNET_PEERSTORE_HELLO_KEY,
+ &hello_updated,
+ nc);
return nc;
}
@@ -1152,7 +1117,8 @@ merge_success (void *cls, int success)
struct StoreHelloCls *shu_cls = cls;
struct GNUNET_PEERSTORE_StoreHelloContext *huc = shu_cls->huc;
- if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_remove
(huc->store_context_map, huc->pid, shu_cls->sc))
+ if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_remove
(huc->store_context_map,
+ huc->pid,
shu_cls->sc))
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"There was no store context to be removed after storing hello
for peer %s\n",
GNUNET_i2s (huc->pid));
@@ -1213,14 +1179,16 @@ store_hello (struct GNUNET_PEERSTORE_StoreHelloContext
*huc,
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"store_hello with expiration %s\n",
GNUNET_STRINGS_absolute_time_to_string (hello_exp));
- GNUNET_assert (GNUNET_SYSERR != GNUNET_CONTAINER_multipeermap_put
(huc->store_context_map,
- huc->pid,
- sc,
-
GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE));
+ GNUNET_assert (GNUNET_SYSERR != GNUNET_CONTAINER_multipeermap_put (
+ huc->store_context_map,
+ huc->pid,
+ sc,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE));
shu_cls->sc = sc;
}
-//TODO Find a better name for the function. We do not merge, but replace, if
there is a storing process
+
+// TODO Find a better name for the function. We do not merge, but replace, if
there is a storing process
// during another store process with a newer hello.
static void
merge_uri (void *cls,
@@ -1249,11 +1217,12 @@ merge_uri (void *cls,
GNUNET_STRINGS_absolute_time_to_string (huc_hello_exp_time));
store_hello (huc, huc->hello);
}
- else if (GNUNET_NO == huc->success && 0 == GNUNET_memcmp (huc->pid,
&record->peer))
+ else if (GNUNET_NO == huc->success && 0 == GNUNET_memcmp (huc->pid,
+ &record->peer))
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "merge_uri record for peer %s\n",
- GNUNET_i2s (&record->peer));
+ "merge_uri record for peer %s\n",
+ GNUNET_i2s (&record->peer));
hello = record->value;
if ((0 == record->value_size))
{
@@ -1310,11 +1279,11 @@ GNUNET_PEERSTORE_hello_add (struct
GNUNET_PEERSTORE_Handle *h,
GNUNET_STRINGS_absolute_time_to_string (huc_exp),
size_msg);
huc->wc = GNUNET_PEERSTORE_watch (h,
- "peerstore",
- NULL,
- GNUNET_PEERSTORE_HELLO_KEY,
- &merge_uri,
- huc);
+ "peerstore",
+ NULL,
+ GNUNET_PEERSTORE_HELLO_KEY,
+ &merge_uri,
+ huc);
GNUNET_HELLO_builder_free (builder);
return huc;
@@ -1322,13 +1291,14 @@ GNUNET_PEERSTORE_hello_add (struct
GNUNET_PEERSTORE_Handle *h,
static enum GNUNET_GenericReturnValue
-free_store_context(void *cls,
- const struct GNUNET_PeerIdentity *key,
- void *value)
+free_store_context (void *cls,
+ const struct GNUNET_PeerIdentity *key,
+ void *value)
{
(void) cls;
- GNUNET_PEERSTORE_store_cancel ((struct GNUNET_PEERSTORE_StoreContext *)
value);
+ GNUNET_PEERSTORE_store_cancel ((struct
+ GNUNET_PEERSTORE_StoreContext *) value);
return GNUNET_YES; // FIXME why is this a map anyway
}
diff --git a/src/service/topology/gnunet-daemon-topology.c
b/src/service/topology/gnunet-daemon-topology.c
index a1875eb38..8b9360e86 100644
--- a/src/service/topology/gnunet-daemon-topology.c
+++ b/src/service/topology/gnunet-daemon-topology.c
@@ -943,7 +943,7 @@ cleaning_task (void *cls)
}
if (NULL != ps)
{
- GNUNET_PEERSTORE_disconnect (ps, GNUNET_YES);
+ GNUNET_PEERSTORE_disconnect (ps);
ps = NULL;
}
if (NULL != stats)
diff --git a/src/service/transport/gnunet-communicator-tcp.c
b/src/service/transport/gnunet-communicator-tcp.c
index 318f2286e..e1d11d569 100644
--- a/src/service/transport/gnunet-communicator-tcp.c
+++ b/src/service/transport/gnunet-communicator-tcp.c
@@ -3526,7 +3526,7 @@ do_shutdown (void *cls)
}
if (NULL != peerstore)
{
- GNUNET_PEERSTORE_disconnect (peerstore, GNUNET_NO);
+ GNUNET_PEERSTORE_disconnect (peerstore);
peerstore = NULL;
}
if (NULL != resolve_request_handle)
diff --git a/src/service/transport/gnunet-service-transport.c
b/src/service/transport/gnunet-service-transport.c
index bd178d914..5cce27b1c 100644
--- a/src/service/transport/gnunet-service-transport.c
+++ b/src/service/transport/gnunet-service-transport.c
@@ -11620,7 +11620,7 @@ do_shutdown (void *cls)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Disconnecting from PEERSTORE service\n");
- GNUNET_PEERSTORE_disconnect (peerstore, GNUNET_NO);
+ GNUNET_PEERSTORE_disconnect (peerstore);
peerstore = NULL;
}
GNUNET_CONTAINER_multishortmap_destroy (dvlearn_map);
diff --git a/src/service/transport/transport-testing2.c
b/src/service/transport/transport-testing2.c
index b88a2b7e9..4081e5111 100644
--- a/src/service/transport/transport-testing2.c
+++ b/src/service/transport/transport-testing2.c
@@ -649,7 +649,7 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Disconnecting from PEERSTORE service\n");
- GNUNET_PEERSTORE_disconnect (p->ph, GNUNET_NO);
+ GNUNET_PEERSTORE_disconnect (p->ph);
p->ph = NULL;
}
diff --git a/src/service/transport/transport_api_cmd_stop_peer.c
b/src/service/transport/transport_api_cmd_stop_peer.c
index 60d48c56b..795a2f0f3 100644
--- a/src/service/transport/transport_api_cmd_stop_peer.c
+++ b/src/service/transport/transport_api_cmd_stop_peer.c
@@ -84,7 +84,7 @@ stop_peer_run (void *cls,
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Disconnecting from PEERSTORE service\n");
- GNUNET_PEERSTORE_disconnect (sps->ph, GNUNET_NO);
+ GNUNET_PEERSTORE_disconnect (sps->ph);
}
if (NULL != sps->peer)
{
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.