]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Improve learn error reporting
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 28 Sep 2021 14:34:25 +0000 (15:34 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 28 Sep 2021 14:34:43 +0000 (15:34 +0100)
src/libstat/stat_process.c

index 2c77942b600edf73a080091b9976e76dea6c53fc..2ebc8f599e52953686f53507c352b0cef0111f7b 100644 (file)
@@ -339,14 +339,12 @@ rspamd_stat_backends_process (struct rspamd_stat_ctx *st_ctx,
 {
        guint i;
        struct rspamd_statfile *st;
-       struct rspamd_classifier *cl;
        gpointer bk_run;
 
        g_assert (task->stat_runtimes != NULL);
 
        for (i = 0; i < st_ctx->statfiles->len; i++) {
                st = g_ptr_array_index (st_ctx->statfiles, i);
-               cl = st->classifier;
                bk_run = g_ptr_array_index (task->stat_runtimes, i);
 
                if (bk_run != NULL) {
@@ -677,7 +675,7 @@ rspamd_stat_backends_learn (struct rspamd_stat_ctx *st_ctx,
        gpointer bk_run;
        guint i, j;
        gint id;
-       gboolean res = FALSE;
+       gboolean res = FALSE, backend_found = FALSE;
 
        for (i = 0; i < st_ctx->classifiers->len; i ++) {
                cl = g_ptr_array_index (st_ctx->classifiers, i);
@@ -714,11 +712,14 @@ rspamd_stat_backends_learn (struct rspamd_stat_ctx *st_ctx,
                                        goto end;
                                }
 
-                               msg_warn_task ("no runtime for backend %s; classifier %s; symbol %s",
+                               msg_debug_task ("no runtime for backend %s; classifier %s; symbol %s",
                                                st->backend->name, cl->cfg->name, st->stcf->symbol);
                                continue;
                        }
 
+                       /* We set sel merely when we have runtime */
+                       backend_found = TRUE;
+
                        if (!(task->flags & RSPAMD_TASK_FLAG_UNLEARN)) {
                                if (!!spam != !!st->stcf->is_spam) {
                                        /* If we are not unlearning, then do not touch another class */
@@ -748,26 +749,36 @@ rspamd_stat_backends_learn (struct rspamd_stat_ctx *st_ctx,
        }
 
 end:
-       if (!res && err) {
-               return res;
-       }
 
-       if (!res && sel == NULL) {
-               if (classifier) {
-                       g_set_error (err, rspamd_stat_quark (), 404, "cannot find classifier "
-                                       "with name %s", classifier);
-               }
-               else {
-                       g_set_error (err, rspamd_stat_quark (), 404, "no classifiers defined");
+       if (!res) {
+               if (err && *err) {
+                       /* Error has been set already */
+                       return res;
                }
 
-               return FALSE;
-       }
+               if (sel == NULL) {
+                       if (classifier) {
+                               g_set_error(err, rspamd_stat_quark(), 404, "cannot find classifier "
+                                                                                                                  "with name %s", classifier);
+                       }
+                       else {
+                               g_set_error(err, rspamd_stat_quark(), 404, "no classifiers defined");
+                       }
 
-       if (!res) {
-               g_set_error (err, rspamd_stat_quark (), 404, "cannot find statfile "
-                               "backend to learn %s in %s", spam ? "spam" : "ham",
-                               classifier ? classifier : "default classifier");
+                       return FALSE;
+               }
+               else if (!backend_found) {
+                       g_set_error(err, rspamd_stat_quark(), 404, "all learn conditions "
+                                                                                                          "denied learning %s in %s",
+                                       spam ? "spam" : "ham",
+                                       classifier ? classifier : "default classifier");
+               }
+               else {
+                       g_set_error(err, rspamd_stat_quark(), 404, "cannot find statfile "
+                                                                                                          "backend to learn %s in %s",
+                                       spam ? "spam" : "ham",
+                                       classifier ? classifier : "default classifier");
+               }
        }
 
        return res;