You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2015/10/10 14:19:58 UTC
svn commit: r1707875 - in
/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging:
EffectiveLevelFilter.java LoggerNameAndLevelFilter.java
QpidLoggerTurboFilter.java
Author: kwall
Date: Sat Oct 10 12:19:57 2015
New Revision: 1707875
URL: http://svn.apache.org/viewvc?rev=1707875&view=rev
Log:
QPID-6785: Improve performance of QpidLoggerTurboFilter
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/EffectiveLevelFilter.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/LoggerNameAndLevelFilter.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/QpidLoggerTurboFilter.java
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/EffectiveLevelFilter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/EffectiveLevelFilter.java?rev=1707875&r1=1707874&r2=1707875&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/EffectiveLevelFilter.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/EffectiveLevelFilter.java Sat Oct 10 12:19:57 2015
@@ -25,5 +25,7 @@ import ch.qos.logback.classic.Logger;
public interface EffectiveLevelFilter
{
+ Level getLevel();
+
Level getEffectiveLevel(Logger logger);
}
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/LoggerNameAndLevelFilter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/LoggerNameAndLevelFilter.java?rev=1707875&r1=1707874&r2=1707875&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/LoggerNameAndLevelFilter.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/LoggerNameAndLevelFilter.java Sat Oct 10 12:19:57 2015
@@ -50,6 +50,7 @@ public class LoggerNameAndLevelFilter ex
_level = level;
}
+ @Override
public Level getLevel()
{
return _level;
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/QpidLoggerTurboFilter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/QpidLoggerTurboFilter.java?rev=1707875&r1=1707874&r2=1707875&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/QpidLoggerTurboFilter.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/QpidLoggerTurboFilter.java Sat Oct 10 12:19:57 2015
@@ -23,7 +23,6 @@ package org.apache.qpid.server.logging;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.atomic.AtomicReference;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
@@ -36,15 +35,10 @@ import org.slf4j.Marker;
public final class QpidLoggerTurboFilter extends TurboFilter
{
private final CopyOnWriteArrayList<EffectiveLevelFilter> _filters = new CopyOnWriteArrayList<>();
- private final AtomicReference<ConcurrentMap<Logger, Level>> _effectiveLevels =
- new AtomicReference<>();
-
- public QpidLoggerTurboFilter()
- {
- clearCachedResults();
- }
-
-
+ private final ConcurrentMap<Logger, Integer> _effectiveLevels = new ConcurrentHashMap<>();
+ private volatile int _minimumLogLevel = Level.OFF.levelInt;
+ /** Ensures writes to _minimumLogLevel are single threaded */
+ private final Object _minimumLevelLock = new Object();
@Override
public FilterReply decide(final Marker marker,
@@ -54,25 +48,28 @@ public final class QpidLoggerTurboFilter
final Object[] params,
final Throwable t)
{
- final ConcurrentMap<Logger, Level> effectiveLevels = _effectiveLevels.get();
- Level effectiveLoggerLevel = effectiveLevels.get(logger);
+ if (level.levelInt < _minimumLogLevel)
+ {
+ // Optimisation - no filters accept an event with this level
+ return FilterReply.DENY;
+ }
+ Integer effectiveLoggerLevel = _effectiveLevels.get(logger);
if(effectiveLoggerLevel == null)
{
- effectiveLoggerLevel = Level.OFF;
- for(EffectiveLevelFilter filter : _filters)
+ effectiveLoggerLevel = Level.OFF.levelInt;
+ for (EffectiveLevelFilter filter : _filters)
{
- Level loggerLevel = filter.getEffectiveLevel(logger);
- if(effectiveLoggerLevel.isGreaterOrEqual(loggerLevel))
+ Integer loggerLevel = filter.getEffectiveLevel(logger).levelInt;
+ if (effectiveLoggerLevel >= loggerLevel)
{
effectiveLoggerLevel = loggerLevel;
}
}
- effectiveLevels.putIfAbsent(logger, effectiveLoggerLevel);
+ _effectiveLevels.putIfAbsent(logger, effectiveLoggerLevel);
}
-
- return level.isGreaterOrEqual(effectiveLoggerLevel) ? FilterReply.ACCEPT : FilterReply.DENY;
+ return level.levelInt >= effectiveLoggerLevel ? FilterReply.ACCEPT : FilterReply.DENY;
}
public void filterAdded(EffectiveLevelFilter filter)
@@ -83,11 +80,6 @@ public final class QpidLoggerTurboFilter
}
}
- private void clearCachedResults()
- {
- _effectiveLevels.set(new ConcurrentHashMap<Logger, Level>());
- }
-
public void filterRemoved(EffectiveLevelFilter filter)
{
if(_filters.remove(filter))
@@ -104,6 +96,19 @@ public final class QpidLoggerTurboFilter
}
}
+ private void clearCachedResults()
+ {
+ _effectiveLevels.clear();
+ synchronized (_minimumLevelLock)
+ {
+ _minimumLogLevel = Level.OFF.levelInt;
+ for (EffectiveLevelFilter filter : _filters)
+ {
+ _minimumLogLevel = Math.min(filter.getLevel().levelInt, _minimumLogLevel);
+ }
+ }
+ }
+
@Override
public boolean equals(final Object o)
{
@@ -134,11 +139,6 @@ public final class QpidLoggerTurboFilter
}
- public static QpidLoggerTurboFilter installIfNecessaryToRootContext()
- {
- return installIfNecessary(getRootContext());
- }
-
public static void uninstallFromRootContext()
{
uninstall(getRootContext());
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org