]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Fix autolearning errors and redis cache
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 14 Oct 2016 13:07:30 +0000 (14:07 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 14 Oct 2016 13:07:30 +0000 (14:07 +0100)
src/libstat/learn_cache/redis_cache.c
src/libstat/stat_process.c

index cd92bfac4b0a027a597499e86a6b53c16e2cc73d..21f35a5634937c655eeda8a562f9d6c6f64d16ab 100644 (file)
@@ -134,8 +134,7 @@ rspamd_stat_cache_redis_get (redisAsyncContext *c, gpointer r, gpointer priv)
                if ((val > 0 && (task->flags & RSPAMD_TASK_FLAG_LEARN_SPAM)) ||
                                (val < 0 && (task->flags & RSPAMD_TASK_FLAG_LEARN_HAM))) {
                        /* Already learned */
-                       g_set_error (&task->err, rspamd_stat_quark (), 404,
-                                       "<%s> has been already "
+                       msg_info_task ("<%s> has been already "
                                        "learned as %s, ignore it", task->message_id,
                                        (task->flags & RSPAMD_TASK_FLAG_LEARN_SPAM) ? "spam" : "ham");
                        task->flags |= RSPAMD_TASK_FLAG_ALREADY_LEARNED;
@@ -144,6 +143,7 @@ rspamd_stat_cache_redis_get (redisAsyncContext *c, gpointer r, gpointer priv)
                        /* Unlearn flag */
                        task->flags |= RSPAMD_TASK_FLAG_UNLEARN;
                }
+
                rspamd_upstream_ok (rt->selected);
        }
        else {
index ed24499ba4f4653af95364ace64ff498ebd8a17c..993de3816a79bd67e0664ac1ad98db1b3df411ff 100644 (file)
@@ -547,6 +547,16 @@ rspamd_stat_classifiers_learn (struct rspamd_stat_ctx *st_ctx,
        gint cb_ref;
        gchar *cond_str = NULL;
 
+       if ((task->flags & RSPAMD_TASK_FLAG_ALREADY_LEARNED) && err != NULL &&
+                       *err == NULL) {
+               /* Do not learn twice */
+               g_set_error (err, rspamd_stat_quark (), 404, "<%s> has been already "
+                               "learned as %s, ignore it", task->message_id,
+                               spam ? "spam" : "ham");
+
+               return FALSE;
+       }
+
        /* Check whether we have learned that file */
        for (i = 0; i < st_ctx->classifiers->len; i ++) {
                cl = g_ptr_array_index (st_ctx->classifiers, i);