gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r11368 - gnunet/src/fs
Date: Fri, 14 May 2010 13:20:29 +0200

Author: grothoff
Date: 2010-05-14 13:20:29 +0200 (Fri, 14 May 2010)
New Revision: 11368

Modified:
   gnunet/src/fs/Makefile.am
   gnunet/src/fs/fs_namespace.c
   gnunet/src/fs/fs_publish.c
   gnunet/src/fs/gnunet-service-fs.c
   gnunet/src/fs/gnunet-service-fs_drq.c
   gnunet/src/fs/gnunet-service-fs_indexing.c
   gnunet/src/fs/gnunet-service-fs_indexing.h
Log:
fixes

Modified: gnunet/src/fs/Makefile.am
===================================================================
--- gnunet/src/fs/Makefile.am   2010-05-13 13:43:35 UTC (rev 11367)
+++ gnunet/src/fs/Makefile.am   2010-05-14 11:20:29 UTC (rev 11368)
@@ -94,7 +94,6 @@
 
 gnunet_service_fs_SOURCES =  \
  gnunet-service-fs.c \
- gnunet-service-fs_drq.c gnunet-service-fs_drq.h \
  gnunet-service-fs_indexing.c gnunet-service-fs_indexing.h 
 gnunet_service_fs_LDADD =  \
  $(top_builddir)/src/fs/libgnunetfs.la \

Modified: gnunet/src/fs/fs_namespace.c
===================================================================
--- gnunet/src/fs/fs_namespace.c        2010-05-13 13:43:35 UTC (rev 11367)
+++ gnunet/src/fs/fs_namespace.c        2010-05-14 11:20:29 UTC (rev 11368)
@@ -79,6 +79,11 @@
   struct GNUNET_DATASTORE_Handle *dsh;
 
   /**
+   * Our scheduler.
+   */
+  struct GNUNET_SCHEDULER_Handle *sched;
+
+  /**
    * Our KSK URI.
    */ 
   struct GNUNET_FS_Uri *ksk_uri;
@@ -126,6 +131,23 @@
 
 
 /**
+ * Disconnect from the datastore.
+ * 
+ * @param cls datastore handle
+ * @param tc scheduler context
+ */
+static void
+do_disconnect (void *cls,
+              const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  struct GNUNET_DATASTORE_Handle *dsh = cls;
+
+  GNUNET_DATASTORE_disconnect (dsh, 
+                              GNUNET_NO);
+}
+
+
+/**
  * Continuation called to notify client about result of the
  * operation.
  *
@@ -149,7 +171,10 @@
   if (GNUNET_OK != success)
     {
       /* error! */
-      GNUNET_DATASTORE_disconnect (ac->dsh, GNUNET_NO);
+      GNUNET_SCHEDULER_add_continuation (ac->sched,
+                                        &do_disconnect,
+                                        ac->dsh,
+                                        GNUNET_SCHEDULER_REASON_PREREQ_DONE);
       ac->cont (ac->cont_cls, NULL, msg);
       GNUNET_FS_uri_destroy (ac->ksk_uri);
       GNUNET_free (ac->pt);
@@ -161,7 +186,10 @@
   if (ac->pos == ac->ksk_uri->data.ksk.keywordCount)
     {
       /* done! */
-      GNUNET_DATASTORE_disconnect (ac->dsh, GNUNET_NO);
+      GNUNET_SCHEDULER_add_continuation (ac->sched,
+                                        &do_disconnect,
+                                        ac->dsh,
+                                        GNUNET_SCHEDULER_REASON_PREREQ_DONE);
       ac->cont (ac->cont_cls, ac->ksk_uri, NULL);
       GNUNET_FS_uri_destroy (ac->ksk_uri);
       GNUNET_free (ac->pt);
@@ -296,6 +324,7 @@
   ctx->cont = cont;
   ctx->cont_cls = cont_cls;
   ctx->dsh = dsh;
+  ctx->sched = h->sched;
   ctx->ksk_uri = GNUNET_FS_uri_dup (ksk_uri);
   ctx->nb = nb;
   ctx->pt = pt;

Modified: gnunet/src/fs/fs_publish.c
===================================================================
--- gnunet/src/fs/fs_publish.c  2010-05-13 13:43:35 UTC (rev 11367)
+++ gnunet/src/fs/fs_publish.c  2010-05-14 11:20:29 UTC (rev 11368)
@@ -109,11 +109,14 @@
 /**
  * Cleanup the publish context, we're done with it.
  *
- * @param pc struct to clean up after
+ * @param cls struct to clean up after
+ * @param tc scheduler context
  */
 static void
-publish_cleanup (struct GNUNET_FS_PublishContext *pc)
+publish_cleanup (void *cls,
+                const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
+  struct GNUNET_FS_PublishContext *pc = cls;
   GNUNET_FS_file_information_destroy (pc->fi, NULL, NULL);
   if (pc->namespace != NULL)
     GNUNET_FS_namespace_delete (pc->namespace, GNUNET_NO);
@@ -146,9 +149,11 @@
 
   if (GNUNET_SYSERR == pcc->sc->in_network_wait)
     {
-      /* we were aborted in the meantime,
-        finish shutdown! */
-      publish_cleanup (pcc->sc);
+      /* we were aborted in the meantime, finish shutdown! */
+      GNUNET_SCHEDULER_add_continuation (pcc->sc->h->sched,                    
                 
+                                        &publish_cleanup,
+                                        pcc->sc,
+                                        GNUNET_SCHEDULER_REASON_PREREQ_DONE);
       GNUNET_free (pcc);
       return;
     }
@@ -1016,7 +1021,10 @@
                                      &fip_signal_suspend,
                                      pc);
   GNUNET_FS_end_top (pc->h, pc->top);
-  publish_cleanup (pc);
+  GNUNET_SCHEDULER_add_continuation (pc->h->sched,                             
         
+                                    &publish_cleanup,
+                                    pc,
+                                    GNUNET_SCHEDULER_REASON_PREREQ_DONE);
 }
 
 /**
@@ -1163,7 +1171,10 @@
       pc->in_network_wait = GNUNET_SYSERR;
       return;
     }
-  publish_cleanup (pc);
+  GNUNET_SCHEDULER_add_continuation (pc->h->sched,                             
         
+                                    &publish_cleanup,
+                                    pc,
+                                    GNUNET_SCHEDULER_REASON_PREREQ_DONE);
 }
 
 

Modified: gnunet/src/fs/gnunet-service-fs.c
===================================================================
--- gnunet/src/fs/gnunet-service-fs.c   2010-05-13 13:43:35 UTC (rev 11367)
+++ gnunet/src/fs/gnunet-service-fs.c   2010-05-14 11:20:29 UTC (rev 11368)
@@ -43,7 +43,6 @@
 #include "gnunet_signatures.h"
 #include "gnunet_statistics_service.h"
 #include "gnunet_util_lib.h"
-#include "gnunet-service-fs_drq.h"
 #include "gnunet-service-fs_indexing.h"
 #include "fs.h"
 
@@ -89,7 +88,12 @@
  */
 struct PendingMessage;
 
+/**
+ * Our connection to the datastore.
+ */
+static struct GNUNET_DATASTORE_Handle *dsh;
 
+
 /**
  * Function called upon completion of a transmission.
  *
@@ -472,10 +476,10 @@
   GNUNET_PEER_Id *used_pids;
   
   /**
-   * Our entry in the DRQ (non-NULL while we wait for our
+   * Our entry in the queue (non-NULL while we wait for our
    * turn to interact with the local database).
    */
-  struct DatastoreRequestQueue *drq;
+  struct GNUNET_DATASTORE_QueueEntry *qe;
 
   /**
    * Size of the 'bf' (in bytes).
@@ -696,10 +700,10 @@
   (void) GNUNET_CONTAINER_multihashmap_remove (query_request_map,
                                               &pr->query,
                                               pr);
-  if (pr->drq != NULL)
-    {
-      GNUNET_FS_drq_get_cancel (pr->drq);
-      pr->drq = NULL;
+  if (pr->qe != NULL)
+     {
+      GNUNET_DATASTORE_cancel (pr->qe);
+      pr->qe = NULL;
     }
   if (pr->client_request_list != NULL)
     {
@@ -995,6 +999,9 @@
       GNUNET_STATISTICS_destroy (stats, GNUNET_NO);
       stats = NULL;
     }
+  GNUNET_DATASTORE_disconnect (dsh,
+                              GNUNET_NO);
+  dsh = NULL;
   sched = NULL;
   cfg = NULL;  
 }
@@ -1852,13 +1859,13 @@
       /* only possible reply, stop requesting! */
       while (NULL != pr->pending_head)
        destroy_pending_message_list_entry (pr->pending_head);
-      if (pr->drq != NULL)
+      if (pr->qe != NULL)
        {
          if (pr->client_request_list != NULL)
            GNUNET_SERVER_receive_done 
(pr->client_request_list->client_list->client, 
                                        GNUNET_YES);
-         GNUNET_FS_drq_get_cancel (pr->drq);
-         pr->drq = NULL;
+         GNUNET_DATASTORE_cancel (pr->qe);
+         pr->qe = NULL;
        }
       pr->do_remove = GNUNET_YES;
       if (pr->task != GNUNET_SCHEDULER_NO_TASK)
@@ -2209,7 +2216,7 @@
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                  "Done processing local replies, forwarding request to other 
peers.\n");
 #endif
-      pr->drq = NULL;
+      pr->qe = NULL;
       if (pr->client_request_list != NULL)
        {
          GNUNET_SERVER_receive_done 
(pr->client_request_list->client_list->client, 
@@ -2263,7 +2270,7 @@
                                            anonymity, expiration, uid, 
                                            &process_local_reply,
                                            pr))
-       GNUNET_FS_drq_get_next (GNUNET_YES);
+       GNUNET_DATASTORE_get_next (dsh, GNUNET_YES);
       return;
     }
   /* check for duplicates */
@@ -2284,7 +2291,7 @@
                                gettext_noop ("# results filtered by query 
bloomfilter"),
                                1,
                                GNUNET_NO);
-      GNUNET_FS_drq_get_next (GNUNET_YES);
+      GNUNET_DATASTORE_get_next (dsh, GNUNET_YES);
       return;
     }
 #if DEBUG_FS
@@ -2315,7 +2322,7 @@
     {
       GNUNET_break (0);
       /* FIXME: consider removing the block? */
-      GNUNET_FS_drq_get_next (GNUNET_YES);
+      GNUNET_DATASTORE_get_next (dsh, GNUNET_YES);
       return;
     }
   prq.type = type;
@@ -2325,7 +2332,7 @@
   if ( (type == GNUNET_BLOCK_TYPE_DBLOCK) ||
        (type == GNUNET_BLOCK_TYPE_IBLOCK) ) 
     {
-      GNUNET_FS_drq_get_next (GNUNET_NO);
+      GNUNET_DATASTORE_get_next (dsh, GNUNET_NO);
       return;
     }
   if ( (pr->client_request_list == NULL) &&
@@ -2340,10 +2347,10 @@
                                gettext_noop ("# processing result set cut 
short due to load"),
                                1,
                                GNUNET_NO);
-      GNUNET_FS_drq_get_next (GNUNET_NO);
+      GNUNET_DATASTORE_get_next (dsh, GNUNET_NO);
       return;
     }
-  GNUNET_FS_drq_get_next (GNUNET_YES);
+  GNUNET_DATASTORE_get_next (dsh, GNUNET_YES);
 }
 
 
@@ -2656,12 +2663,14 @@
     type = GNUNET_BLOCK_TYPE_ANY; /* to get on-demand as well */
   timeout = GNUNET_TIME_relative_multiply (BASIC_DATASTORE_REQUEST_DELAY,
                                           (pr->priority + 1)); 
-  pr->drq = GNUNET_FS_drq_get (&gm->query,
-                              type,                           
-                              &process_local_reply,
-                              pr,
-                              timeout,
-                              GNUNET_NO);
+  pr->qe = GNUNET_DATASTORE_get (dsh,
+                                &gm->query,
+                                type,                         
+                                (unsigned int) preference, 64 /* FIXME */,
+                                
+                                timeout,
+                                &process_local_reply,
+                                pr);
 
   /* Are multiple results possible?  If so, start processing remotely now! */
   switch (pr->type)
@@ -2852,12 +2861,13 @@
                                                   
GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE));
   if (type == GNUNET_BLOCK_TYPE_DBLOCK)
     type = GNUNET_BLOCK_TYPE_ANY; /* get on-demand blocks too! */
-  pr->drq = GNUNET_FS_drq_get (&sm->query,
-                              type,                           
-                              &process_local_reply,
-                              pr,
-                              GNUNET_CONSTANTS_SERVICE_TIMEOUT,
-                              GNUNET_YES);
+  pr->qe = GNUNET_DATASTORE_get (dsh,
+                                &sm->query,
+                                type,
+                                -3, -1,
+                                GNUNET_CONSTANTS_SERVICE_TIMEOUT,              
               
+                                &process_local_reply,
+                                pr);
 }
 
 
@@ -2937,9 +2947,13 @@
       requests_by_expiration_heap = NULL;
       GNUNET_CONTAINER_multihashmap_destroy (peer_request_map);
       peer_request_map = NULL;
-
+      if (dsh != NULL)
+       {
+         GNUNET_DATASTORE_disconnect (dsh, GNUNET_NO);
+         dsh = NULL;
+       }
       return GNUNET_SYSERR;
-    }  
+    }
   GNUNET_SERVER_disconnect_notify (server, 
                                   &handle_client_disconnect,
                                   NULL);
@@ -2969,11 +2983,19 @@
   active_migration = GNUNET_CONFIGURATION_get_value_yesno (cfg,
                                                           "FS",
                                                           "ACTIVEMIGRATION");
-  if ( (GNUNET_OK != GNUNET_FS_drq_init (sched, cfg)) ||
-       (GNUNET_OK != GNUNET_FS_indexing_init (sched, cfg)) ||
+  dsh = GNUNET_DATASTORE_connect (cfg,
+                                 sched);
+  if (dsh == NULL)
+    {
+      GNUNET_SCHEDULER_shutdown (sched);
+      return;
+    }
+  if ( (GNUNET_OK != GNUNET_FS_indexing_init (sched, cfg, dsh)) ||
        (GNUNET_OK != main_init (sched, server, cfg)) )
     {    
       GNUNET_SCHEDULER_shutdown (sched);
+      GNUNET_DATASTORE_disconnect (dsh, GNUNET_NO);
+      dsh = NULL;
       return;   
     }
 }

Modified: gnunet/src/fs/gnunet-service-fs_drq.c
===================================================================
--- gnunet/src/fs/gnunet-service-fs_drq.c       2010-05-13 13:43:35 UTC (rev 
11367)
+++ gnunet/src/fs/gnunet-service-fs_drq.c       2010-05-14 11:20:29 UTC (rev 
11368)
@@ -113,10 +113,6 @@
  */
 static struct DatastoreRequestQueue *drq_tail;
 
-/**
- * Our connection to the datastore.
- */
-static struct GNUNET_DATASTORE_Handle *dsh;
 
 /**
  * Pointer to the currently actively running request,
@@ -295,9 +291,6 @@
              "DRQ shutdown initiated\n");
 #endif
   GNUNET_assert (NULL != dsh);
-  GNUNET_DATASTORE_disconnect (dsh,
-                              GNUNET_NO);
-  dsh = NULL;
   while (NULL != (drq = drq_head))
     {
       drq_head = drq->next;
@@ -465,7 +458,6 @@
   rc->cont (rc->cont_cls,
            success,
            msg);
-  GNUNET_DATASTORE_disconnect (rc->rmdsh, GNUNET_NO);
   GNUNET_free (rc);
 }
 
@@ -494,8 +486,6 @@
   struct GNUNET_DATASTORE_Handle *rmdsh; 
   struct RemoveContext *rc;
 
-  rmdsh = GNUNET_DATASTORE_connect (cfg,
-                                   sched);
   if (rmdsh == NULL)
     {
       GNUNET_break (0);

Modified: gnunet/src/fs/gnunet-service-fs_indexing.c
===================================================================
--- gnunet/src/fs/gnunet-service-fs_indexing.c  2010-05-13 13:43:35 UTC (rev 
11367)
+++ gnunet/src/fs/gnunet-service-fs_indexing.c  2010-05-14 11:20:29 UTC (rev 
11368)
@@ -101,7 +101,13 @@
  */
 static const struct GNUNET_CONFIGURATION_Handle *cfg;
 
+/**
+ * Datastore handle.  Created and destroyed by code in
+ * gnunet-service-fs (this is an alias).
+ */
+static struct GNUNET_DATASTORE_Handle *dsh;
 
+
 /**
  * Write the current index information list to disk.
  */ 
@@ -575,12 +581,14 @@
   if (size != sizeof (struct OnDemandBlock))
     {
       GNUNET_break (0);
-      GNUNET_FS_drq_remove (key,
-                           size,
-                           data,
-                           &remove_cont,
-                           NULL,
-                           GNUNET_TIME_UNIT_FOREVER_REL);
+      GNUNET_DATASTORE_remove (dsh,
+                              key,
+                              size,
+                              data,
+                              -1, -1,
+                              GNUNET_TIME_UNIT_FOREVER_REL,
+                              &remove_cont,
+                              NULL);
       return GNUNET_SYSERR;
     }
   odb = (const struct OnDemandBlock*) data;
@@ -608,12 +616,14 @@
                  STRERROR (errno));
       if (fh != NULL)
        GNUNET_DISK_file_close (fh);
-      GNUNET_FS_drq_remove (key,
-                           size,
-                           data,
-                           &remove_cont,
-                           NULL,
-                           GNUNET_TIME_UNIT_FOREVER_REL);
+      GNUNET_DATASTORE_remove (dsh,
+                              key,
+                              size,
+                              data,
+                              -1, -1,
+                              GNUNET_TIME_UNIT_FOREVER_REL,
+                              &remove_cont,
+                              NULL);
       return GNUNET_SYSERR;
     }
   GNUNET_DISK_file_close (fh);
@@ -637,12 +647,14 @@
                  _("Indexed file `%s' changed at offset %llu\n"),
                  fn,
                  (unsigned long long) off);
-      GNUNET_FS_drq_remove (key,
-                           size,
-                           data,
-                           &remove_cont,
-                           NULL,
-                           GNUNET_TIME_UNIT_FOREVER_REL);
+      GNUNET_DATASTORE_remove (dsh,
+                              key,
+                              size,
+                              data,
+                              -1, -1,
+                              GNUNET_TIME_UNIT_FOREVER_REL,
+                              &remove_cont,
+                              NULL);
       return GNUNET_SYSERR;
     }
 #if DEBUG_FS
@@ -692,13 +704,16 @@
  *
  * @param s scheduler to use
  * @param c configuration to use
+ * @param d datastore to use
  */
 int
 GNUNET_FS_indexing_init (struct GNUNET_SCHEDULER_Handle *s,
-                        const struct GNUNET_CONFIGURATION_Handle *c)
+                        const struct GNUNET_CONFIGURATION_Handle *c,
+                        struct GNUNET_DATASTORE_Handle *d)
 {
   sched = s;
   cfg = c;
+  dsh = d;
   ifm = GNUNET_CONTAINER_multihashmap_create (128);
   GNUNET_SCHEDULER_add_delayed (sched,
                                GNUNET_TIME_UNIT_FOREVER_REL,

Modified: gnunet/src/fs/gnunet-service-fs_indexing.h
===================================================================
--- gnunet/src/fs/gnunet-service-fs_indexing.h  2010-05-13 13:43:35 UTC (rev 
11367)
+++ gnunet/src/fs/gnunet-service-fs_indexing.h  2010-05-14 11:20:29 UTC (rev 
11368)
@@ -112,11 +112,13 @@
  *
  * @param s scheduler to use
  * @param c configuration to use
+ * @param d datastore to use
  * @return GNUNET_OK on success
  */
 int
 GNUNET_FS_indexing_init (struct GNUNET_SCHEDULER_Handle *s,
-                        const struct GNUNET_CONFIGURATION_Handle *c);
+                        const struct GNUNET_CONFIGURATION_Handle *c,
+                        struct GNUNET_DATASTORE_Handle *d);
 
 
 #endif




reply via email to

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