gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]