(no commit message)
[oweals/gnunet.git] / src / datastore / plugin_datastore.h
index 2fefa2eca084fcaa9e296062327df568ce11dc7d..fa08501cc87cb5edab23398589384e1b079b9b88 100644 (file)
  * @file datastore/plugin_datastore.h
  * @brief API for the database backend plugins.
  * @author Christian Grothoff
- *
- * TODO:
- * - consider defining enumeration or at least typedef
- *   for the type of "type" (instead of using uint32_t)
  */
 #ifndef PLUGIN_DATASTORE_H
 #define PLUGIN_DATASTORE_H
 
+#include "gnunet_block_lib.h"
 #include "gnunet_configuration_lib.h"
-#include "gnunet_scheduler_lib.h"
 #include "gnunet_datastore_service.h"
+#include "gnunet_statistics_service.h"
+#include "gnunet_scheduler_lib.h"
 
 
 /**
  * How many bytes of overhead will we assume per entry
- * in the SQlite DB?
+ * in any DB (for reservations)?
  */
 #define GNUNET_DATASTORE_ENTRY_OVERHEAD 256
 
 
+/**
+ * Function invoked to notify service of disk utilization
+ * changes.
+ *
+ * @param cls closure
+ * @param delta change in disk utilization, 
+ *        0 for "reset to empty"
+ */
+typedef void (*DiskUtilizationChange)(void *cls,
+                                     int delta);
+
+
 /**
  * The datastore service will pass a pointer to a struct
  * of this type as the first and only argument to the
@@ -59,6 +69,16 @@ struct GNUNET_DATASTORE_PluginEnvironment
    */
   struct GNUNET_SCHEDULER_Handle *sched;
 
+  /**
+   * Function to call on disk utilization change.
+   */
+  DiskUtilizationChange duc;
+
+  /**
+   * Closure.
+   */
+  void *cls;
+
 };
 
 
@@ -102,7 +122,7 @@ typedef int (*PluginIterator) (void *cls,
                               const GNUNET_HashCode * key,
                               uint32_t size,
                               const void *data,
-                              uint32_t type,
+                              enum GNUNET_BLOCK_Type type,
                               uint32_t priority,
                               uint32_t anonymity,
                               struct GNUNET_TIME_Absolute
@@ -112,6 +132,8 @@ typedef int (*PluginIterator) (void *cls,
 /**
  * Get an estimate of how much space the database is
  * currently using.
+ *
+ * @param cls closure
  * @return number of bytes used on disk
  */
 typedef unsigned long long (*PluginGetSize) (void *cls);
@@ -139,7 +161,7 @@ typedef int (*PluginPut) (void *cls,
                          const GNUNET_HashCode * key,
                          uint32_t size,
                          const void *data,
-                         uint32_t type,
+                         enum GNUNET_BLOCK_Type type,
                          uint32_t priority,
                          uint32_t anonymity,
                          struct GNUNET_TIME_Absolute expiration,
@@ -170,7 +192,7 @@ typedef int (*PluginPut) (void *cls,
 typedef void (*PluginGet) (void *cls,
                           const GNUNET_HashCode * key,
                           const GNUNET_HashCode * vhash,
-                          uint32_t type,
+                          enum GNUNET_BLOCK_Type type,
                           PluginIterator iter, void *iter_cls);
 
 
@@ -185,6 +207,7 @@ typedef void (*PluginGet) (void *cls,
  * Note that it is possible for multiple values to match this put.
  * In that case, all of the respective values are updated.
  *
+ * @param cls closure
  * @param uid unique identifier of the datum
  * @param delta by how much should the priority
  *     change?  If priority + delta < 0 the
@@ -206,6 +229,7 @@ typedef int (*PluginUpdate) (void *cls,
  * Select a subset of the items in the datastore and call
  * the given iterator for each of them.
  *
+ * @param cls closure
  * @param type entries of which type should be considered?
  *        Use 0 for any type.
  * @param iter function to call on each matching value; however,
@@ -217,12 +241,14 @@ typedef int (*PluginUpdate) (void *cls,
  * @param iter_cls closure for iter
  */
 typedef void (*PluginSelector) (void *cls,
-                                uint32_t type,
+                                enum GNUNET_BLOCK_Type type,
                                 PluginIterator iter,
                                 void *iter_cls);
 
 /**
  * Drop database.
+ *
+ * @param cls closure
  */
 typedef void (*PluginDrop) (void *cls);