I’ll take a look tomorrow.
> On Nov 10, 2017, at 22:47, Ralph Goers <rgo...@apache.org> wrote: > > Please review this commit as I want to make sure I didn’t make any mistakes. > > Ralph > > >> On Nov 10, 2017, at 6:46 AM, rgo...@apache.org wrote: >> >> Repository: logging-log4j2 >> Updated Branches: >> refs/heads/master 0dca987fc -> aad2f132b >> >> >> LOG4J2-2106 Reduce locking when checking for rollover >> >> >> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo >> Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/aad2f132 >> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/aad2f132 >> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/aad2f132 >> >> Branch: refs/heads/master >> Commit: aad2f132b27f9e2667c2b43fb58ce59e3914edb3 >> Parents: 0dca987 >> Author: Ralph Goers <rgo...@apache.org> >> Authored: Fri Nov 10 06:46:11 2017 -0700 >> Committer: Ralph Goers <rgo...@apache.org> >> Committed: Fri Nov 10 06:46:11 2017 -0700 >> >> ---------------------------------------------------------------------- >> .../appender/rolling/RollingFileManager.java | 57 +++++++++++++------- >> .../rolling/SizeBasedTriggeringPolicy.java | 2 +- >> .../rolling/TimeBasedTriggeringPolicy.java | 2 +- >> src/changes/changes.xml | 3 ++ >> 4 files changed, 42 insertions(+), 22 deletions(-) >> ---------------------------------------------------------------------- >> >> >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/aad2f132/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java >> ---------------------------------------------------------------------- >> diff --git >> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java >> >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java >> index 6ccfe7b..ff7bf6d 100644 >> --- >> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java >> +++ >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java >> @@ -29,6 +29,9 @@ import java.util.concurrent.Semaphore; >> import java.util.concurrent.ThreadPoolExecutor; >> import java.util.concurrent.TimeUnit; >> import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; >> +import java.util.concurrent.locks.Lock; >> +import java.util.concurrent.locks.ReadWriteLock; >> +import java.util.concurrent.locks.ReentrantReadWriteLock; >> >> import org.apache.logging.log4j.core.Layout; >> import org.apache.logging.log4j.core.LifeCycle; >> @@ -65,6 +68,9 @@ public class RollingFileManager extends FileManager { >> private volatile boolean initialized = false; >> private volatile String fileName; >> private final FileExtension fileExtension; >> + private final ReadWriteLock updateLock = new ReentrantReadWriteLock(); >> + private final Lock readLock = updateLock.readLock(); >> + private final Lock writeLock = updateLock.writeLock(); >> >> /* This executor pool will create a new Thread for every work async >> action to be performed. Using it allows >> us to make sure all the Threads are completed when the Manager is >> stopped. */ >> @@ -247,9 +253,14 @@ public class RollingFileManager extends FileManager { >> * Determines if a rollover should occur. >> * @param event The LogEvent. >> */ >> - public synchronized void checkRollover(final LogEvent event) { >> - if (triggeringPolicy.isTriggeringEvent(event)) { >> - rollover(); >> + public void checkRollover(final LogEvent event) { >> + readLock.lock(); >> + try { >> + if (triggeringPolicy.isTriggeringEvent(event)) { >> + rollover(); >> + } >> + } finally { >> + readLock.unlock(); >> } >> } >> >> @@ -333,25 +344,31 @@ public class RollingFileManager extends FileManager { >> } >> >> public void setTriggeringPolicy(final TriggeringPolicy triggeringPolicy) { >> - triggeringPolicy.initialize(this); >> - final TriggeringPolicy policy = this.triggeringPolicy; >> - int count = 0; >> - boolean policyUpdated = false; >> - do { >> - ++count; >> - } while (!(policyUpdated = >> triggeringPolicyUpdater.compareAndSet(this, this.triggeringPolicy, >> triggeringPolicy)) >> - && count < MAX_TRIES); >> - if (policyUpdated) { >> - if (triggeringPolicy instanceof LifeCycle) { >> - ((LifeCycle) triggeringPolicy).start(); >> - } >> - if (policy instanceof LifeCycle) { >> - ((LifeCycle) policy).stop(); >> + writeLock.lock(); >> + try { >> + triggeringPolicy.initialize(this); >> + final TriggeringPolicy policy = this.triggeringPolicy; >> + int count = 0; >> + boolean policyUpdated = false; >> + do { >> + ++count; >> } >> - } else { >> - if (triggeringPolicy instanceof LifeCycle) { >> - ((LifeCycle) triggeringPolicy).stop(); >> + while (!(policyUpdated = >> triggeringPolicyUpdater.compareAndSet(this, this.triggeringPolicy, >> triggeringPolicy)) >> + && count < MAX_TRIES); >> + if (policyUpdated) { >> + if (triggeringPolicy instanceof LifeCycle) { >> + ((LifeCycle) triggeringPolicy).start(); >> + } >> + if (policy instanceof LifeCycle) { >> + ((LifeCycle) policy).stop(); >> + } >> + } else { >> + if (triggeringPolicy instanceof LifeCycle) { >> + ((LifeCycle) triggeringPolicy).stop(); >> + } >> } >> + } finally { >> + writeLock.unlock(); >> } >> } >> >> >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/aad2f132/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java >> ---------------------------------------------------------------------- >> diff --git >> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java >> >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java >> index f77d571..81069fa 100644 >> --- >> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java >> +++ >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java >> @@ -73,7 +73,7 @@ public class SizeBasedTriggeringPolicy extends >> AbstractTriggeringPolicy { >> * @return true if a rollover should take place, false otherwise. >> */ >> @Override >> - public boolean isTriggeringEvent(final LogEvent event) { >> + public synchronized boolean isTriggeringEvent(final LogEvent event) { >> final boolean triggered = manager.getFileSize() > maxFileSize; >> if (triggered) { >> manager.getPatternProcessor().updateTime(); >> >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/aad2f132/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java >> ---------------------------------------------------------------------- >> diff --git >> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java >> >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java >> index 7f6ac79..953e186 100644 >> --- >> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java >> +++ >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java >> @@ -122,7 +122,7 @@ public final class TimeBasedTriggeringPolicy extends >> AbstractTriggeringPolicy { >> * @return true if a rollover should occur. >> */ >> @Override >> - public boolean isTriggeringEvent(final LogEvent event) { >> + public synchronized boolean isTriggeringEvent(final LogEvent event) { >> if (manager.getFileSize() == 0) { >> return false; >> } >> >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/aad2f132/src/changes/changes.xml >> ---------------------------------------------------------------------- >> diff --git a/src/changes/changes.xml b/src/changes/changes.xml >> index d54484a..2bcefb2 100644 >> --- a/src/changes/changes.xml >> +++ b/src/changes/changes.xml >> @@ -31,6 +31,9 @@ >> - "remove" - Removed >> --> >> <release version="2.10.0" date="2017-MM-DD" description="GA Release >> 2.10.0"> >> + <action issue="LOG4J2-2106" dev="rogers" type="fix"> >> + Reduce locking when checking for rollover. >> + </action> >> <action issue="LOG4J2-2103" dev="mikes" type="add"> >> XML encoding for PatternLayout. >> </action> >> >> > >