X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_datastore_plugin.h;h=36a3fbec2c9893e445f5018da26221915c59988f;hb=ca391c48238c36462ca11be9299cc7c9a09e6bbe;hp=8e30e219c2e140077083331ef090a252d213a4c0;hpb=dbd516d426cd54b2991be23f1e94938a41e97172;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_datastore_plugin.h b/src/include/gnunet_datastore_plugin.h index 8e30e219c..36a3fbec2 100644 --- a/src/include/gnunet_datastore_plugin.h +++ b/src/include/gnunet_datastore_plugin.h @@ -93,6 +93,7 @@ struct GNUNET_DATASTORE_PluginEnvironment * @param type type of the content * @param priority priority of the content * @param anonymity anonymity-level for the content + * @param replication replication-level for the content * @param expiration expiration time for the content * @param uid unique identifier for the datum * @return #GNUNET_OK to keep the item @@ -100,14 +101,15 @@ struct GNUNET_DATASTORE_PluginEnvironment */ typedef int (*PluginDatumProcessor) (void *cls, - const struct GNUNET_HashCode *key, - uint32_t size, - const void *data, - enum GNUNET_BLOCK_Type type, - uint32_t priority, - uint32_t anonymity, - struct GNUNET_TIME_Absolute expiration, - uint64_t uid); + const struct GNUNET_HashCode *key, + uint32_t size, + const void *data, + enum GNUNET_BLOCK_Type type, + uint32_t priority, + uint32_t anonymity, + uint32_t replication, + struct GNUNET_TIME_Absolute expiration, + uint64_t uid); /** @@ -132,7 +134,8 @@ typedef void * @param cls closure * @param key key for the item stored * @param size size of the item stored - * @param status #GNUNET_OK or #GNUNET_SYSERROR + * @param status #GNUNET_OK if inserted, #GNUNET_NO if updated, + * or #GNUNET_SYSERROR if error * @param msg error message on error */ typedef void @@ -150,6 +153,7 @@ typedef void * * @param cls closure * @param key key for the item + * @param absent true if the key was not found in the bloom filter * @param size number of bytes in @a data * @param data content stored * @param type type of the content @@ -161,16 +165,18 @@ typedef void * @param cont_cls continuation closure for @a cont */ typedef void -(*PluginPut) (void *cls, const struct GNUNET_HashCode *key, - uint32_t size, - const void *data, - enum GNUNET_BLOCK_Type type, - uint32_t priority, - uint32_t anonymity, - uint32_t replication, - struct GNUNET_TIME_Absolute expiration, - PluginPutCont cont, - void *cont_cls); +(*PluginPut) (void *cls, + const struct GNUNET_HashCode *key, + bool absent, + uint32_t size, + const void *data, + enum GNUNET_BLOCK_Type type, + uint32_t priority, + uint32_t anonymity, + uint32_t replication, + struct GNUNET_TIME_Absolute expiration, + PluginPutCont cont, + void *cont_cls); /** @@ -203,106 +209,95 @@ typedef void * Get one of the results for a particular key in the datastore. * * @param cls closure - * @param offset offset of the result (modulo num-results); - * specific ordering does not matter for the offset - * @param key key to match, never NULL - * @param vhash hash of the value, maybe NULL (to - * match all values that have the right key). - * Note that for DBlocks there is no difference - * betwen key and vhash, but for other blocks - * there may be! + * @param next_uid return the result with lowest uid >= next_uid + * @param random if true, return a random result instead of using next_uid + * @param key maybe NULL (to match all entries) * @param type entries of which type are relevant? * Use 0 for any type. * @param proc function to call on the matching value; - * proc should be called with NULL if there is no result + * will be called with NULL if nothing matches * @param proc_cls closure for @a proc */ typedef void (*PluginGetKey) (void *cls, - uint64_t offset, - const struct GNUNET_HashCode *key, - const struct GNUNET_HashCode *vhash, - enum GNUNET_BLOCK_Type type, - PluginDatumProcessor proc, - void *proc_cls); + uint64_t next_uid, + bool random, + const struct GNUNET_HashCode *key, + enum GNUNET_BLOCK_Type type, + PluginDatumProcessor proc, + void *proc_cls); /** - * Get a random item (additional constraints may apply depending on - * the specific implementation). Calls @a proc with all values ZERO or - * NULL if no item applies, otherwise @a proc is called once and only - * once with an item. + * Remove continuation. * * @param cls closure - * @param proc function to call the value (once only). - * @param proc_cls closure for @a proc + * @param key key for the content removed + * @param size number of bytes removed + * @param status #GNUNET_OK if removed, #GNUNET_NO if not found, + * or #GNUNET_SYSERROR if error + * @param msg error message on error */ typedef void -(*PluginGetRandom) (void *cls, - PluginDatumProcessor proc, - void *proc_cls); +(*PluginRemoveCont) (void *cls, + const struct GNUNET_HashCode *key, + uint32_t size, + int status, + const char *msg); /** - * Update continuation. + * Remove a particular key in the datastore. * * @param cls closure - * @param status #GNUNET_OK or #GNUNET_SYSERR - * @param msg error message on error + * @param key key for the content + * @param size number of bytes in data + * @param data content stored + * @param cont continuation called with success or failure status + * @param cont_cls continuation closure for @a cont */ typedef void -(*PluginUpdateCont) (void *cls, - int status, - const char *msg); +(*PluginRemoveKey) (void *cls, + const struct GNUNET_HashCode *key, + uint32_t size, + const void *data, + PluginRemoveCont cont, + void *cont_cls); /** - * Update the priority for a particular key in the datastore. If - * the expiration time in value is different than the time found in - * the datastore, the higher value should be kept. For the - * anonymity level, the lower value is to be used. The specified - * priority should be added to the existing priority, ignoring the - * priority in value. + * Get a random item (additional constraints may apply depending on + * the specific implementation). Calls @a proc with all values ZERO or + * NULL if no item applies, otherwise @a proc is called once and only + * once with an item. * * @param cls closure - * @param uid unique identifier of the datum - * @param delta by how much should the priority - * change? If priority + delta < 0 the - * priority should be set to 0 (never go - * negative). - * @param expire new expiration time should be the - * MAX of any existing expiration time and - * this value - * @param cont continuation called with success or failure status - * @param cons_cls continuation closure + * @param proc function to call the value (once only). + * @param proc_cls closure for @a proc */ typedef void -(*PluginUpdate) (void *cls, - uint64_t uid, - int delta, - struct GNUNET_TIME_Absolute expire, - PluginUpdateCont cont, - void *cont_cls); +(*PluginGetRandom) (void *cls, + PluginDatumProcessor proc, + void *proc_cls); /** - * Select a single item from the datastore at the specified offset - * (among those applicable). + * Select a single item from the datastore (among those applicable). * * @param cls closure - * @param offset offset of the result (modulo num-results); - * specific ordering does not matter for the offset + * @param next_uid return the result with lowest uid >= next_uid * @param type entries of which type should be considered? * Must not be zero (ANY). - * @param proc function to call on the matching value + * @param proc function to call on the matching value; + * will be called with NULL if no value matches * @param proc_cls closure for @a proc */ typedef void (*PluginGetType) (void *cls, - uint64_t offset, - enum GNUNET_BLOCK_Type type, - PluginDatumProcessor proc, - void *proc_cls); + uint64_t next_uid, + enum GNUNET_BLOCK_Type type, + PluginDatumProcessor proc, + void *proc_cls); /** @@ -338,16 +333,6 @@ struct GNUNET_DATASTORE_PluginFunctions */ PluginPut put; - /** - * Update the priority for a particular key in the datastore. If - * the expiration time in value is different than the time found in - * the datastore, the higher value should be kept. For the - * anonymity level, the lower value is to be used. The specified - * priority should be added to the existing priority, ignoring the - * priority in value. - */ - PluginUpdate update; - /** * Get a particular datum matching a given hash from the datastore. */ @@ -355,9 +340,6 @@ struct GNUNET_DATASTORE_PluginFunctions /** * Get datum (of the specified type) with anonymity level zero. - * This function is allowed to ignore the 'offset' argument - * and instead return a random result (with zero anonymity of - * the correct type) if implementing an offset is expensive. */ PluginGetType get_zero_anonymity; @@ -388,6 +370,10 @@ struct GNUNET_DATASTORE_PluginFunctions */ PluginGetKeys get_keys; + /** + * Function to remove an item from the database. + */ + PluginRemoveKey remove_key; }; #endif