summaryrefslogtreecommitdiffstats
path: root/src/kvstorage.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/kvstorage.h')
-rw-r--r--src/kvstorage.h283
1 files changed, 0 insertions, 283 deletions
diff --git a/src/kvstorage.h b/src/kvstorage.h
deleted file mode 100644
index 91db10df3..000000000
--- a/src/kvstorage.h
+++ /dev/null
@@ -1,283 +0,0 @@
-/* Copyright (c) 2011, Vsevolod Stakhov
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef KVSTORAGE_H_
-#define KVSTORAGE_H_
-
-#include "config.h"
-
-struct rspamd_kv_cache;
-struct rspamd_kv_backend;
-struct rspamd_kv_storage;
-struct rspamd_kv_expire;
-struct rspamd_kv_element;
-
-/* Locking definitions */
-#if ((GLIB_MAJOR_VERSION == 2) && (GLIB_MINOR_VERSION > 30))
-#define RW_R_LOCK g_rw_lock_reader_lock
-#define RW_R_UNLOCK g_rw_lock_reader_unlock
-#define RW_W_LOCK g_rw_lock_writer_lock
-#define RW_W_UNLOCK g_rw_lock_writer_unlock
-#else
-#define RW_R_LOCK g_static_rw_lock_reader_lock
-#define RW_R_UNLOCK g_static_rw_lock_reader_unlock
-#define RW_W_LOCK g_static_rw_lock_writer_lock
-#define RW_W_UNLOCK g_static_rw_lock_writer_unlock
-#endif
-
-/* Callbacks for cache */
-typedef void (*cache_init)(struct rspamd_kv_cache *cache);
-typedef struct rspamd_kv_element * (*cache_insert)(struct rspamd_kv_cache *cache,
- gpointer key, guint keylen, gpointer value, gsize len);
-typedef gboolean (*cache_replace)(struct rspamd_kv_cache *cache, gpointer key,
- guint keylen,
- struct rspamd_kv_element *elt);
-typedef struct rspamd_kv_element * (*cache_lookup)(struct rspamd_kv_cache *cache,
- gpointer key, guint keylen);
-typedef struct rspamd_kv_element * (*cache_delete)(struct rspamd_kv_cache *cache,
- gpointer key, guint keylen);
-typedef void (*cache_steal)(struct rspamd_kv_cache *cache,
- struct rspamd_kv_element * elt);
-typedef void (*cache_destroy)(struct rspamd_kv_cache *cache);
-
-/* Callbacks for backend */
-typedef void (*backend_init)(struct rspamd_kv_backend *backend);
-typedef gboolean (*backend_insert)(struct rspamd_kv_backend *backend,
- gpointer key, guint keylen,
- struct rspamd_kv_element *elt);
-typedef gboolean (*backend_replace)(struct rspamd_kv_backend *backend,
- gpointer key, guint keylen,
- struct rspamd_kv_element *elt);
-typedef struct rspamd_kv_element * (*backend_lookup)(struct rspamd_kv_backend *
- backend, gpointer key,
- guint keylen);
-typedef void (*backend_delete)(struct rspamd_kv_backend *backend, gpointer key,
- guint keylen);
-typedef gboolean (*backend_sync)(struct rspamd_kv_backend *backend);
-typedef gboolean (*backend_incref)(struct rspamd_kv_backend *backend,
- gpointer key, guint keylen);
-typedef void (*backend_destroy)(struct rspamd_kv_backend *backend);
-
-/* Callbacks for expire */
-typedef void (*expire_init)(struct rspamd_kv_expire *expire);
-typedef void (*expire_insert)(struct rspamd_kv_expire *expire,
- struct rspamd_kv_element *elt);
-typedef void (*expire_delete)(struct rspamd_kv_expire *expire,
- struct rspamd_kv_element *elt);
-typedef gboolean (*expire_step)(struct rspamd_kv_expire *expire,
- struct rspamd_kv_storage *storage,
- time_t now, gboolean forced);
-typedef void (*expire_destroy)(struct rspamd_kv_expire *expire);
-
-
-/* Flags of element */
-enum rspamd_kv_flags {
- KV_ELT_ARRAY = 1 << 0,
- KV_ELT_PERSISTENT = 1 << 1,
- KV_ELT_DIRTY = 1 << 2,
- KV_ELT_OUSTED = 1 << 3,
- KV_ELT_NEED_FREE = 1 << 4,
- KV_ELT_INTEGER = 1 << 5,
- KV_ELT_NEED_INSERT = 1 << 6,
- KV_ELT_NEED_EXPIRE = 1 << 7
-};
-
-#define ELT_DATA(elt) (gchar *)(elt)->data + (elt)->keylen + 1
-#define ELT_LONG(elt) *((glong *)((elt)->data + (elt)->keylen + 1))
-#define ELT_KEY(elt) (gchar *)(elt)->data
-#define ELT_SIZE(elt) elt->size + sizeof(struct rspamd_kv_element) + \
- elt->keylen + 1
-
-/* Common structures description */
-
-struct rspamd_kv_element {
- time_t age; /*< age of element */
- guint32 expire; /*< expire of element */
- gint flags; /*< element flags */
- gsize size; /*< size of element */
- TAILQ_ENTRY (rspamd_kv_element) entry; /*< list entry */
- guint keylen; /*< length of key */
-
- gpointer p; /*< pointer to data */
- gchar data[1]; /*< expandable data */
-};
-
-struct rspamd_kv_cache {
- cache_init init_func; /*< this callback is called on kv storage initialization */
- cache_insert insert_func; /*< this callback is called when element is inserted */
- cache_replace replace_func; /*< this callback is called when element is replace */
- cache_lookup lookup_func; /*< this callback is used for lookup of element */
- cache_delete delete_func; /*< this callback is called when an element is deleted */
- cache_steal steal_func; /*< this callback is used to replace duplicates in cache */
- cache_destroy destroy_func; /*< this callback is used for destroying all elements inside cache */
-};
-struct rspamd_kv_backend {
- backend_init init_func; /*< this callback is called on kv storage initialization */
- backend_insert insert_func; /*< this callback is called when element is inserted */
- backend_replace replace_func; /*< this callback is called when element is replaced */
- backend_lookup lookup_func; /*< this callback is used for lookup of element */
- backend_delete delete_func; /*< this callback is called when an element is deleted */
- backend_sync sync_func; /*< this callback is called when backend need to be synced */
- backend_incref incref_func; /*< this callback is called when element must be ref'd */
- backend_destroy destroy_func; /*< this callback is used for destroying all elements inside backend */
-};
-struct rspamd_kv_expire {
- expire_init init_func; /*< this callback is called on kv storage initialization */
- expire_insert insert_func; /*< this callback is called when element is inserted */
- expire_step step_func; /*< this callback is used when cache is full */
- expire_delete delete_func; /*< this callback is called when an element is deleted */
- expire_destroy destroy_func; /*< this callback is used for destroying all elements inside expire */
-};
-
-/* Main kv storage structure */
-
-struct rspamd_kv_storage {
- struct rspamd_kv_cache *cache;
- struct rspamd_kv_backend *backend;
- struct rspamd_kv_expire *expire;
-
- gsize elts; /*< current elements count in a storage */
- gsize max_elts; /*< maximum number of elements in a storage */
-
- gsize memory; /*< memory eaten */
- gsize max_memory; /*< memory limit */
-
- gint id; /* char ID */
- gchar *name; /* numeric ID */
-
- gboolean no_overwrite; /* do not overwrite data with the same keys */
-#if ((GLIB_MAJOR_VERSION == 2) && (GLIB_MINOR_VERSION > 30))
- GRWLock rwlock; /* rwlock in new glib */
-#else
- GStaticRWLock rwlock; /* rwlock for threaded access */
-#endif
-};
-
-/** Create new kv storage */
-struct rspamd_kv_storage * rspamd_kv_storage_new (gint id, const gchar *name,
- struct rspamd_kv_cache *cache, struct rspamd_kv_backend *backend,
- struct rspamd_kv_expire *expire,
- gsize max_elts, gsize max_memory, gboolean no_overwrite);
-
-/** Insert new element to the kv storage */
-gboolean rspamd_kv_storage_insert (struct rspamd_kv_storage *storage,
- gpointer key,
- guint keylen,
- gpointer data,
- gsize len,
- gint flags,
- guint expire);
-
-/** Insert element only in cache */
-gboolean rspamd_kv_storage_insert_cache (struct rspamd_kv_storage *storage,
- gpointer key,
- guint keylen,
- gpointer data,
- gsize len,
- gint flags,
- guint expire,
- struct rspamd_kv_element **pelt);
-
-/** Replace an element in the kv storage */
-gboolean rspamd_kv_storage_replace (struct rspamd_kv_storage *storage,
- gpointer key,
- guint keylen,
- struct rspamd_kv_element *elt);
-
-/** Increment value in kvstorage */
-gboolean rspamd_kv_storage_increment (struct rspamd_kv_storage *storage,
- gpointer key,
- guint keylen,
- glong *value);
-
-/** Lookup an element inside kv storage */
-struct rspamd_kv_element * rspamd_kv_storage_lookup (
- struct rspamd_kv_storage *storage,
- gpointer key,
- guint keylen,
- time_t now);
-
-/** Expire an element from kv storage */
-struct rspamd_kv_element * rspamd_kv_storage_delete (
- struct rspamd_kv_storage *storage,
- gpointer key,
- guint keylen);
-
-/** Destroy kv storage */
-void rspamd_kv_storage_destroy (struct rspamd_kv_storage *storage);
-
-/** Insert array */
-gboolean rspamd_kv_storage_insert_array (struct rspamd_kv_storage *storage,
- gpointer key,
- guint keylen,
- guint elt_size,
- gpointer data,
- gsize len,
- gint flags,
- guint expire);
-
-/** Set element inside array */
-gboolean rspamd_kv_storage_set_array (struct rspamd_kv_storage *storage,
- gpointer key,
- guint keylen,
- guint elt_num,
- gpointer data,
- gsize len,
- time_t now);
-
-/** Get element inside array */
-gboolean rspamd_kv_storage_get_array (struct rspamd_kv_storage *storage,
- gpointer key,
- guint keylen,
- guint elt_num,
- gpointer *data,
- gsize *len,
- time_t now);
-
-/* Hash table functions */
-guint kv_elt_hash_func (gconstpointer e);
-gboolean kv_elt_compare_func (gconstpointer e1, gconstpointer e2);
-
-/**
- * LRU expire
- */
-struct rspamd_kv_expire * rspamd_lru_expire_new (void);
-
-/**
- * Ordinary hash
- */
-struct rspamd_kv_cache * rspamd_kv_hash_new (void);
-
-/**
- * Radix tree
- */
-struct rspamd_kv_cache * rspamd_kv_radix_new (void);
-
-#ifdef WITH_JUDY
-/**
- * Judy tree
- */
-struct rspamd_kv_cache * rspamd_kv_judy_new (void);
-#endif
-
-#endif /* KVSTORAGE_H_ */