From 7fd5a65a11d756618ddc51a22f005efdc108ba45 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 28 Jan 2015 15:01:32 +0000 Subject: [PATCH] Increase revision after learning. --- src/libstat/backends/backends.h | 3 +++ src/libstat/backends/mmaped_file.c | 16 ++++++++++++++++ src/libstat/stat_config.c | 3 ++- src/libstat/stat_process.c | 17 ++++++++++++++++- 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/libstat/backends/backends.h b/src/libstat/backends/backends.h index d174756df..a3042e8a4 100644 --- a/src/libstat/backends/backends.h +++ b/src/libstat/backends/backends.h @@ -48,6 +48,7 @@ struct rspamd_stat_backend { gboolean (*learn_token)(struct token_node_s *tok, struct rspamd_token_result *res, gpointer ctx); gulong (*total_learns)(struct rspamd_statfile_runtime *runtime, gpointer ctx); + gulong (*inc_learns)(struct rspamd_statfile_runtime *runtime, gpointer ctx); gpointer ctx; }; @@ -62,5 +63,7 @@ gboolean rspamd_mmaped_file_learn_token (struct token_node_s *tok, gpointer ctx); gulong rspamd_mmaped_file_total_learns (struct rspamd_statfile_runtime *runtime, gpointer ctx); +gulong rspamd_mmaped_file_inc_learns (struct rspamd_statfile_runtime *runtime, + gpointer ctx); #endif /* BACKENDS_H_ */ diff --git a/src/libstat/backends/mmaped_file.c b/src/libstat/backends/mmaped_file.c index 8965353a1..e85db248b 100644 --- a/src/libstat/backends/mmaped_file.c +++ b/src/libstat/backends/mmaped_file.c @@ -956,3 +956,19 @@ rspamd_mmaped_file_total_learns (struct rspamd_statfile_runtime *runtime, return rev; } + +gulong +rspamd_mmaped_file_inc_learns (struct rspamd_statfile_runtime *runtime, + gpointer ctx) +{ + rspamd_mmaped_file_t *mf = (rspamd_mmaped_file_t *)runtime; + guint64 rev = 0; + time_t t; + + if (mf != NULL) { + rspamd_mmaped_file_inc_revision (mf); + rspamd_mmaped_file_get_revision (mf, &rev, &t); + } + + return rev; +} diff --git a/src/libstat/stat_config.c b/src/libstat/stat_config.c index a214710f2..7d24be267 100644 --- a/src/libstat/stat_config.c +++ b/src/libstat/stat_config.c @@ -50,8 +50,9 @@ struct rspamd_stat_backend stat_backends[] = { .init = rspamd_mmaped_file_init, .runtime = rspamd_mmaped_file_runtime, .process_token = rspamd_mmaped_file_process_token, + .learn_token = rspamd_mmaped_file_learn_token, .total_learns = rspamd_mmaped_file_total_learns, - .learn_token = rspamd_mmaped_file_learn_token + .inc_learns = rspamd_mmaped_file_inc_learns } }; diff --git a/src/libstat/stat_process.c b/src/libstat/stat_process.c index cdf45a80a..b0e8ffdb9 100644 --- a/src/libstat/stat_process.c +++ b/src/libstat/stat_process.c @@ -446,11 +446,13 @@ rspamd_stat_learn (struct rspamd_task *task, gboolean spam, lua_State *L, struct rspamd_stat_ctx *st_ctx; struct rspamd_tokenizer_runtime *tklist = NULL, *tok; struct rspamd_classifier_runtime *cl_run; + struct rspamd_statfile_runtime *st_run; struct classifier_ctx *cl_ctx; struct preprocess_cb_data cbdata; GList *cl_runtimes; - GList *cur; + GList *cur, *curst; gboolean ret = FALSE; + gulong nrev; st_ctx = rspamd_stat_get_ctx (); g_assert (st_ctx != NULL); @@ -509,6 +511,19 @@ rspamd_stat_learn (struct rspamd_task *task, gboolean spam, lua_State *L, g_tree_foreach (cl_run->tok->tokens, rspamd_stat_learn_token, &cbdata); + curst = g_list_first (cl_run->st_runtime); + + while (curst) { + st_run = (struct rspamd_statfile_runtime *)curst->data; + + nrev = st_run->backend->inc_learns (st_run->backend_runtime, + st_run->backend->ctx); + + msg_debug ("learned %s, new revision: %ul", + st_run->st->symbol, nrev); + + curst = g_list_next (curst); + } } else { return FALSE; -- 2.39.5