diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index e9a7c588d5..e00e447844 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -599,6 +599,9 @@ Release 2.7.0 - UNRELEASED YARN-2899. Run TestDockerContainerExecutorWithMocks on Linux only. (Ming Ma via cnauroth) + YARN-2749. Fix some testcases from TestLogAggregationService fails in trunk. + (Xuan Gong via junping_du) + Release 2.6.0 - 2014-11-18 INCOMPATIBLE CHANGES diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/AppLogAggregatorImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/AppLogAggregatorImpl.java index 20887b6648..8eb00f4f65 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/AppLogAggregatorImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/AppLogAggregatorImpl.java @@ -117,6 +117,8 @@ public class AppLogAggregatorImpl implements AppLogAggregator { private final int retentionSize; private final long rollingMonitorInterval; private final NodeId nodeId; + // This variable is only for testing + private final AtomicBoolean waiting = new AtomicBoolean(false); private final Map containerLogAggregators = new HashMap(); @@ -391,6 +393,7 @@ private void doAppLogAggregation() { while (!this.appFinishing.get() && !this.aborted.get()) { synchronized(this) { try { + waiting.set(true); if (this.rollingMonitorInterval > 0) { wait(this.rollingMonitorInterval * 1000); if (this.appFinishing.get() || this.aborted.get()) { @@ -507,7 +510,19 @@ public synchronized void abortLogAggregation() { @Private @VisibleForTesting + // This is only used for testing. + // This will wake the log aggregation thread that is waiting for + // rollingMonitorInterval. + // To use this method, make sure the log aggregation thread is running + // and waiting for rollingMonitorInterval. public synchronized void doLogAggregationOutOfBand() { + while(!waiting.get()) { + try { + wait(200); + } catch (InterruptedException e) { + // Do Nothing + } + } LOG.info("Do OutOfBand log aggregation"); this.notifyAll(); }