]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Rework caches API
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 10 Jan 2016 22:34:19 +0000 (22:34 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 10 Jan 2016 22:34:19 +0000 (22:34 +0000)
src/libstat/learn_cache/learn_cache.h
src/libstat/learn_cache/sqlite3_cache.c
src/libstat/stat_config.c

index 84851649fa80be3e1520eebc2140bda06f9b2317..05c332076adc78381af936469f6cf99c9b4e05bd 100644 (file)
 struct rspamd_task;
 struct rspamd_stat_ctx;
 struct rspamd_config;
+struct rspamd_statfile;
 
 struct rspamd_stat_cache {
        const char *name;
        gpointer (*init)(struct rspamd_stat_ctx *ctx,
-                       struct rspamd_config *cfg, const ucl_object_t *cf);
-       gint (*process)(struct rspamd_task *task,
+                       struct rspamd_config *cfg,
+                       struct rspamd_statfile *st,
+                       const ucl_object_t *cf);
+       gpointer (*runtime)(struct rspamd_task *task,
+                       gpointer ctx);
+       gint (*check)(struct rspamd_task *task,
+                       gboolean is_spam,
+                       gpointer runtime,
+                       gpointer ctx);
+       gint (*learn)(struct rspamd_task *task,
                        gboolean is_spam,
+                       gpointer runtime,
                        gpointer ctx);
        void (*close) (gpointer ctx);
        gpointer ctx;
 };
 
-gpointer rspamd_stat_cache_sqlite3_init(struct rspamd_stat_ctx *ctx,
-               struct rspamd_config *cfg,
-               const ucl_object_t *cf);
-gint rspamd_stat_cache_sqlite3_process (
-               struct rspamd_task *task,
-               gboolean is_spam, gpointer c);
-void rspamd_stat_cache_sqlite3_close (gpointer c);
+#define RSPAMD_STAT_CACHE_DEF(name) \
+               gpointer rspamd_stat_cache_##name##_init (struct rspamd_stat_ctx *ctx, \
+                               struct rspamd_config *cfg, \
+                               struct rspamd_statfile *st, \
+                               const ucl_object_t *cf); \
+               gpointer rspamd_stat_cache_##name##_runtime (struct rspamd_task *task, \
+                               gpointer ctx); \
+               gboolean rspamd_stat_cache_##name##_check (struct rspamd_task *task, \
+                               gboolean is_spam, \
+                               gpointer runtime, \
+                               gpointer ctx); \
+               gboolean rspamd_stat_cache_##name##_learn (struct rspamd_task *task, \
+                               gboolean is_spam, \
+                               gpointer runtime, \
+                               gpointer ctx); \
+               void rspamd_stat_cache_##name##_close (gpointer ctx)
+
+RSPAMD_STAT_CACHE_DEF(sqlite3);
+#ifdef WITH_HIREDIS
+RSPAMD_STAT_CACHE_DEF(redis);
+#endif
 
 #endif /* LEARN_CACHE_H_ */
index 299c1ebd97bfe0991eefc1a3a1556acd2aae0beb..02a6a81ab54421cb76e04ec8df15cf24fea73ea1 100644 (file)
@@ -120,8 +120,9 @@ struct rspamd_stat_sqlite3_ctx {
 };
 
 gpointer
-rspamd_stat_cache_sqlite3_init(struct rspamd_stat_ctx *ctx,
+rspamd_stat_cache_sqlite3_init (struct rspamd_stat_ctx *ctx,
                struct rspamd_config *cfg,
+               struct rspamd_statfile *st,
                const ucl_object_t *cf)
 {
        struct rspamd_stat_sqlite3_ctx *new = NULL;
index 1c6989508a8ba7cfa7c6a729a642e266851c72a8..d8b980aecbb2e990a5dab7e2f5870f9660bcb2cf 100644 (file)
@@ -77,13 +77,20 @@ static struct rspamd_stat_backend stat_backends[] = {
 #endif
 };
 
-static struct rspamd_stat_cache stat_caches[] = {
-       {
-               .name = RSPAMD_DEFAULT_CACHE,
-               .init = rspamd_stat_cache_sqlite3_init,
-               .process = rspamd_stat_cache_sqlite3_process,
-               .close = rspamd_stat_cache_sqlite3_close
+#define RSPAMD_STAT_CACHE_ELT(nam, eltn) { \
+               .name = #nam, \
+               .init = rspamd_stat_cache_##eltn##_init, \
+               .runtime = rspamd_stat_cache_##eltn##_runtime, \
+               .check = rspamd_stat_cache_##eltn##_check, \
+               .learn = rspamd_stat_cache_##eltn##_learn, \
+               .close = rspamd_stat_cache_##eltn##_close \
        }
+
+static struct rspamd_stat_cache stat_caches[] = {
+               RSPAMD_STAT_CACHE_ELT(sqlite3, sqlite3),
+#ifdef WITH_HIREDIS
+               RSPAMD_STAT_CACHE_ELT(redis, redis),
+#endif
 };
 
 void