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 19:21:24 UTC
svn commit: r1707902 - 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 17:21:24 2015
New Revision: 1707902
URL: http://svn.apache.org/viewvc?rev=1707902&view=rev
Log:
QPID-6785: Revert 1707875 - flawed (racey) approach
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=1707902&r1=1707901&r2=1707902&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 17:21:24 2015
@@ -25,7 +25,5 @@ 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=1707902&r1=1707901&r2=1707902&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 17:21:24 2015
@@ -50,7 +50,6 @@ 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=1707902&r1=1707901&r2=1707902&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 17:21:24 2015
@@ -23,6 +23,7 @@ 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;
@@ -35,10 +36,15 @@ import org.slf4j.Marker;
public final class QpidLoggerTurboFilter extends TurboFilter
{
private final CopyOnWriteArrayList<EffectiveLevelFilter> _filters = new CopyOnWriteArrayList<>();
- 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();
+ private final AtomicReference<ConcurrentMap<Logger, Level>> _effectiveLevels =
+ new AtomicReference<>();
+
+ public QpidLoggerTurboFilter()
+ {
+ clearCachedResults();
+ }
+
+
@Override
public FilterReply decide(final Marker marker,
@@ -48,28 +54,25 @@ public final class QpidLoggerTurboFilter
final Object[] params,
final Throwable t)
{
- if (level.levelInt < _minimumLogLevel)
- {
- // Optimisation - no filters accept an event with this level
- return FilterReply.DENY;
- }
+ final ConcurrentMap<Logger, Level> effectiveLevels = _effectiveLevels.get();
+ Level effectiveLoggerLevel = effectiveLevels.get(logger);
- Integer effectiveLoggerLevel = _effectiveLevels.get(logger);
if(effectiveLoggerLevel == null)
{
- effectiveLoggerLevel = Level.OFF.levelInt;
- for (EffectiveLevelFilter filter : _filters)
+ effectiveLoggerLevel = Level.OFF;
+ for(EffectiveLevelFilter filter : _filters)
{
- Integer loggerLevel = filter.getEffectiveLevel(logger).levelInt;
- if (effectiveLoggerLevel >= loggerLevel)
+ Level loggerLevel = filter.getEffectiveLevel(logger);
+ if(effectiveLoggerLevel.isGreaterOrEqual(loggerLevel))
{
effectiveLoggerLevel = loggerLevel;
}
}
- _effectiveLevels.putIfAbsent(logger, effectiveLoggerLevel);
+ effectiveLevels.putIfAbsent(logger, effectiveLoggerLevel);
}
- return level.levelInt >= effectiveLoggerLevel ? FilterReply.ACCEPT : FilterReply.DENY;
+
+ return level.isGreaterOrEqual(effectiveLoggerLevel) ? FilterReply.ACCEPT : FilterReply.DENY;
}
public void filterAdded(EffectiveLevelFilter filter)
@@ -80,6 +83,11 @@ public final class QpidLoggerTurboFilter
}
}
+ private void clearCachedResults()
+ {
+ _effectiveLevels.set(new ConcurrentHashMap<Logger, Level>());
+ }
+
public void filterRemoved(EffectiveLevelFilter filter)
{
if(_filters.remove(filter))
@@ -96,19 +104,6 @@ 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)
{
@@ -139,6 +134,11 @@ 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