gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r12853 - gnunet/src/fs


From: gnunet
Subject: [GNUnet-SVN] r12853 - gnunet/src/fs
Date: Sun, 5 Sep 2010 23:48:41 +0200

Author: grothoff
Date: 2010-09-05 23:48:41 +0200 (Sun, 05 Sep 2010)
New Revision: 12853

Modified:
   gnunet/src/fs/fs_namespace.c
   gnunet/src/fs/test_fs_namespace_list_updateable.c
Log:
fix

Modified: gnunet/src/fs/fs_namespace.c
===================================================================
--- gnunet/src/fs/fs_namespace.c        2010-09-05 15:58:48 UTC (rev 12852)
+++ gnunet/src/fs/fs_namespace.c        2010-09-05 21:48:41 UTC (rev 12853)
@@ -30,6 +30,8 @@
 #include "gnunet_fs_service.h"
 #include "fs.h"
 
+#define DEBUG_NAMESPACE GNUNET_NO
+
 /**
  * Return the name of the directory in which we store
  * our local namespaces (or rather, their public keys).
@@ -1095,6 +1097,8 @@
     {
       if (fc->scc_array[nsn->scc_id] != nsn)
        return GNUNET_YES; /* part of another SCC, end trace */
+      if (nsn->scc_id == fc->id)
+       return GNUNET_YES; /* that's us */
       fc->scc_array[nsn->scc_id] = NULL;
       if (fc->id == UINT_MAX)
        fc->id = nsn->scc_id; /* take over ID */
@@ -1151,7 +1155,14 @@
   if (namespace->update_nodes == NULL)
     read_update_information_graph (namespace);
   if (namespace->update_nodes == NULL)
-    return; /* no nodes */
+    {
+#if DEBUG_NAMESPACE
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                 "No updateable nodes found for ID `%s'\n",
+                 next_id);
+#endif
+      return; /* no nodes */
+    }
   if (namespace->update_map == NULL)
     {
       /* need to construct */
@@ -1181,6 +1192,10 @@
                                                  &pc);
       return;
     }
+#if DEBUG_NAMESPACE
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Calculating SCCs to find roots of update trees\n");
+#endif
   /* Find heads of SCCs in update graph */
   nug = ++namespace->nug_gen;
   fc.scc_array = NULL;
@@ -1190,7 +1205,15 @@
     {
       nsn = namespace->update_nodes[i];
       if (nsn->nug == nug)
-       continue; /* already placed in SCC */
+       {
+#if DEBUG_NAMESPACE
+         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                     "SCC of node `%s' is %u\n",
+                     nsn->id,
+                     nsn->nug);
+#endif
+         continue; /* already placed in SCC */
+       }
       GNUNET_CRYPTO_hash (nsn->update,
                          strlen (nsn->update),
                          &hc);
@@ -1221,6 +1244,12 @@
                                   nsn);
              nsn->scc_id = fc.id;
            }
+#if DEBUG_NAMESPACE
+         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                     "Starting new SCC %u with node `%s'\n",
+                     nsn->scc_id,
+                     nsn->id);
+#endif
          /* put all nodes with same identifier into this SCC */
          GNUNET_CRYPTO_hash (nsn->id,
                              strlen (nsn->id),
@@ -1239,20 +1268,39 @@
          fc.scc_array[fc.id] = nsn;
          nsn->scc_id = fc.id;
        }
+#if DEBUG_NAMESPACE
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                 "SCC of node `%s' is %u\n",
+                 nsn->id,
+                 fc.id);
+#endif
     }
   for (i=0;i<fc.scc_array_size;i++)
     {
       nsn = fc.scc_array[i];
       if (NULL != nsn)
-       ip (ip_cls,
-           nsn->id,
-           nsn->uri,
-           nsn->md,
-           nsn->update);
+       {
+#if DEBUG_NAMESPACE
+         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                     "Root of SCC %u is node `%s'\n",
+                     i,
+                     nsn->id);
+#endif
+
+         ip (ip_cls,
+             nsn->id,
+             nsn->uri,
+             nsn->md,
+             nsn->update);
+       }
     }
   GNUNET_array_grow (fc.scc_array,
                     fc.scc_array_size,
                     0);
+#if DEBUG_NAMESPACE
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Done processing SCCs\n");
+#endif
 }
 
 

Modified: gnunet/src/fs/test_fs_namespace_list_updateable.c
===================================================================
--- gnunet/src/fs/test_fs_namespace_list_updateable.c   2010-09-05 15:58:48 UTC 
(rev 12852)
+++ gnunet/src/fs/test_fs_namespace_list_updateable.c   2010-09-05 21:48:41 UTC 
(rev 12853)
@@ -19,12 +19,9 @@
 */
 
 /**
- * @file fs/test_fs_namespace.c
- * @brief Test for fs_namespace.c
+ * @file fs/test_fs_namespace_list_updateable.c
+ * @brief Test for fs_namespace_list_updateable.c
  * @author Christian Grothoff
- *
- * TODO:
- * - add timeout task
  */
 #include "platform.h"
 #include "gnunet_util_lib.h"
@@ -112,21 +109,75 @@
 
 
 static void
+check_next (void *cls,
+           const char *last_id, 
+           const struct GNUNET_FS_Uri *last_uri,
+           const struct GNUNET_CONTAINER_MetaData *last_meta,
+           const char *next_id)
+{
+  GNUNET_break (0 == strcmp (last_id, "next"));
+  GNUNET_break (0 == strcmp (next_id, "future"));
+  err -= 4;
+}
+
+
+static void
+check_this_next (void *cls,
+                const char *last_id, 
+                const struct GNUNET_FS_Uri *last_uri,
+                const struct GNUNET_CONTAINER_MetaData *last_meta,
+                const char *next_id)
+{
+  GNUNET_break (0 == strcmp (last_id, "this"));
+  GNUNET_break (0 == strcmp (next_id, "next"));
+  err -= 2;
+  err += 4;
+  GNUNET_FS_namespace_list_updateable (ns,
+                                      next_id,
+                                      &check_next,
+                                      NULL);
+}
+
+
+static void
 sks_cont_next (void *cls,
               const struct GNUNET_FS_Uri *uri,
               const char *emsg)
 {
   GNUNET_assert (NULL == emsg);
+  err += 2;
+  GNUNET_FS_namespace_list_updateable (ns,
+                                      NULL,
+                                      &check_this_next,
+                                      NULL);
+
 }
 
 
 static void
+check_this (void *cls,
+           const char *last_id, 
+           const struct GNUNET_FS_Uri *last_uri,
+           const struct GNUNET_CONTAINER_MetaData *last_meta,
+           const char *next_id)
+{
+  GNUNET_break (0 == strcmp (last_id, "this"));
+  GNUNET_break (0 == strcmp (next_id, "next"));
+  err -= 1;
+}
+
+
+static void
 sks_cont_this (void *cls,
               const struct GNUNET_FS_Uri *uri,
               const char *emsg)
 {
   GNUNET_assert (NULL == emsg);
-
+  err = 1;
+  GNUNET_FS_namespace_list_updateable (ns,
+                                      NULL,
+                                      &check_this,
+                                      NULL);
   GNUNET_FS_publish_sks (fs,
                         ns,
                         "next",




reply via email to

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