From ca59a00d0a5eea357bb1dbaf479c73d280d120bc Mon Sep 17 00:00:00 2001 From: Kay Roepke Date: Tue, 17 May 2016 16:26:12 +0200 Subject: [PATCH] MessageProcessors must be instantiated per processing thread (#2231) When introducing the MessageProcessor interface, the processing threads accidentally shared the instances (and by induction the MessageFilter instances as well). That posed no problem for most of the filters, because they do not rely on shared state, but the Drools filter does and could skip messages (because of Drools itself returning early) This change uses a Provider to get the OrderedMessageProcessor instances explicitly and those do not get shared across threads. Fixes #2119, fixes #2188 (cherry picked from commit 507814af73d33d8dea9047131de86c4fcb444fed) --- .../graylog2/messageprocessors/MessageProcessorModule.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/graylog2-server/src/main/java/org/graylog2/messageprocessors/MessageProcessorModule.java b/graylog2-server/src/main/java/org/graylog2/messageprocessors/MessageProcessorModule.java index 2f80c7a24e89..939e01143367 100644 --- a/graylog2-server/src/main/java/org/graylog2/messageprocessors/MessageProcessorModule.java +++ b/graylog2-server/src/main/java/org/graylog2/messageprocessors/MessageProcessorModule.java @@ -16,14 +16,15 @@ */ package org.graylog2.messageprocessors; +import com.google.inject.Scopes; import org.graylog2.plugin.PluginModule; public class MessageProcessorModule extends PluginModule { @Override protected void configure() { addMessageProcessor(MessageFilterChainProcessor.class, MessageFilterChainProcessor.Descriptor.class); - - bind(OrderedMessageProcessors.class).asEagerSingleton(); + // must not be a singleton, because each thread should get an isolated copy of the processors + bind(OrderedMessageProcessors.class).in(Scopes.NO_SCOPE); } }