commit 65f9953: [Fix] #3129 Multiple classifiers on redis working incorrectly

resec resec0109 at gmail.com
Mon Nov 18 11:49:07 UTC 2019


Author: resec
Date: 2019-11-07 11:57:53 +0800
URL: https://github.com/rspamd/rspamd/commit/65f99530f454f1dce95ddc0e9dd04a43758274bc

[Fix] #3129 Multiple classifiers on redis working incorrectly

---
 src/libstat/stat_process.c | 61 +++++++++++++++++-----------------------------
 1 file changed, 23 insertions(+), 38 deletions(-)

diff --git a/src/libstat/stat_process.c b/src/libstat/stat_process.c
index 486a9069f..2ad7080d0 100644
--- a/src/libstat/stat_process.c
+++ b/src/libstat/stat_process.c
@@ -261,38 +261,6 @@ rspamd_stat_backends_process (struct rspamd_stat_ctx *st_ctx,
 	}
 }
 
-static gboolean
-rspamd_stat_backends_post_process (struct rspamd_stat_ctx *st_ctx,
-		struct rspamd_task *task)
-{
-	guint i;
-	struct rspamd_statfile *st;
-	struct rspamd_classifier *cl;
-	gpointer bk_run;
-	gboolean ret = TRUE;
-
-	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;
-
-		if (cl->cfg->flags & RSPAMD_FLAG_CLASSIFIER_NO_BACKEND) {
-			continue;
-		}
-
-		bk_run = g_ptr_array_index (task->stat_runtimes, i);
-
-		if (bk_run != NULL) {
-			if (!st->backend->finalize_process (task, bk_run, st_ctx)) {
-				ret = FALSE;
-			}
-		}
-	}
-
-	return ret;
-}
-
 static void
 rspamd_stat_classifiers_process (struct rspamd_stat_ctx *st_ctx,
 		struct rspamd_task *task)
@@ -327,6 +295,8 @@ rspamd_stat_classifiers_process (struct rspamd_stat_ctx *st_ctx,
 		cl->ham_learns = 0;
 	}
 
+	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;
@@ -357,10 +327,28 @@ rspamd_stat_classifiers_process (struct rspamd_stat_ctx *st_ctx,
 
 		g_assert (cl != NULL);
 
-		/* Ensure that all symbols enabled */
 		skip = FALSE;
 
-		if (!(cl->cfg->flags & RSPAMD_FLAG_CLASSIFIER_NO_BACKEND)) {
+		/* Do not process classifiers on backend failures */
+		for (j = 0; j < cl->statfiles_ids->len; j++) {
+			if (cl->cfg->flags & RSPAMD_FLAG_CLASSIFIER_NO_BACKEND) {
+				continue;
+			}
+
+			id = g_array_index (cl->statfiles_ids, gint, j);
+			bk_run =  g_ptr_array_index (task->stat_runtimes, id);
+			st = g_ptr_array_index (st_ctx->statfiles, id);
+
+			if (bk_run != NULL) {
+				if (!st->backend->finalize_process (task, bk_run, st_ctx)) {
+					skip = TRUE;
+					break
+				}
+			}
+		}
+
+		/* Ensure that all symbols enabled */
+		if (!skip && !(cl->cfg->flags & RSPAMD_FLAG_CLASSIFIER_NO_BACKEND)) {
 			for (j = 0; j < cl->statfiles_ids->len; j++) {
 				id = g_array_index (cl->statfiles_ids, gint, j);
 				bk_run =  g_ptr_array_index (task->stat_runtimes, id);
@@ -425,10 +413,7 @@ rspamd_stat_classify (struct rspamd_task *task, lua_State *L, guint stage,
 	}
 	else if (stage == RSPAMD_TASK_STAGE_CLASSIFIERS_POST) {
 		/* Process classifiers */
-		if (rspamd_stat_backends_post_process (st_ctx, task)) {
-			rspamd_stat_classifiers_process (st_ctx, task);
-		}
-		/* Do not process classifiers on backend failures */
+		rspamd_stat_classifiers_process (st_ctx, task);
 	}
 
 	task->processed_stages |= stage;


More information about the Commits mailing list