HADOOP-12706. TestLocalFsFCStatistics#testStatisticsThreadLocalDataCleanUp times out occasionally. Contributed by Sangjin Lee and Colin Patrick McCabe
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/cdf88952 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/cdf88952 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/cdf88952 Branch: refs/heads/HDFS-1312 Commit: cdf88952599a43b1ef5adda792bfb195c7529fad Parents: 651c23e Author: Jason Lowe <jl...@apache.org> Authored: Thu Jan 14 23:45:03 2016 +0000 Committer: Jason Lowe <jl...@apache.org> Committed: Thu Jan 14 23:45:03 2016 +0000 ---------------------------------------------------------------------- hadoop-common-project/hadoop-common/CHANGES.txt | 6 ++++++ .../apache/hadoop/fs/FCStatisticsBaseTest.java | 21 +++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/cdf88952/hadoop-common-project/hadoop-common/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 6be370c..3f3cbea 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -1652,6 +1652,9 @@ Release 2.7.3 - UNRELEASED HADOOP-12107. long running apps may have a huge number of StatisticsData instances under FileSystem (Sangjin Lee via Ming Ma) + HADOOP-12706. TestLocalFsFCStatistics#testStatisticsThreadLocalDataCleanUp + times out occasionally (Sangjin Lee and Colin Patrick McCabe via jlowe) + Release 2.7.2 - UNRELEASED INCOMPATIBLE CHANGES @@ -2449,6 +2452,9 @@ Release 2.6.4 - UNRELEASED HADOOP-12107. long running apps may have a huge number of StatisticsData instances under FileSystem (Sangjin Lee via Ming Ma) + HADOOP-12706. TestLocalFsFCStatistics#testStatisticsThreadLocalDataCleanUp + times out occasionally (Sangjin Lee and Colin Patrick McCabe via jlowe) + Release 2.6.3 - 2015-12-17 INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/cdf88952/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/FCStatisticsBaseTest.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/FCStatisticsBaseTest.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/FCStatisticsBaseTest.java index 3e33362..2e208d2 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/FCStatisticsBaseTest.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/FCStatisticsBaseTest.java @@ -32,6 +32,8 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.hadoop.fs.FileSystem.Statistics; import org.apache.hadoop.test.GenericTestUtils; import org.junit.Assert; @@ -46,6 +48,8 @@ import com.google.common.util.concurrent.Uninterruptibles; * </p> */ public abstract class FCStatisticsBaseTest { + private static final Log LOG = LogFactory.getLog(FCStatisticsBaseTest.class); + static protected int blockSize = 512; static protected int numBlocks = 1; @@ -110,7 +114,7 @@ public abstract class FCStatisticsBaseTest { fc.delete(filePath, true); } - @Test(timeout=60000) + @Test(timeout=70000) public void testStatisticsThreadLocalDataCleanUp() throws Exception { final Statistics stats = new Statistics("test"); // create a small thread pool to test the statistics @@ -137,17 +141,24 @@ public abstract class FCStatisticsBaseTest { es.shutdownNow(); es.awaitTermination(1, TimeUnit.MINUTES); es = null; - System.gc(); + System.gc(); // force GC to garbage collect threads - // wait for up to 10 seconds + // wait for up to 60 seconds GenericTestUtils.waitFor(new Supplier<Boolean>() { @Override public Boolean get() { int size = stats.getAllThreadLocalDataSize(); allDataSize.set(size); - return size == 0; + if (size == 0) { + return true; + } + LOG.warn("not all references have been cleaned up; still " + + allDataSize.get() + " references left"); + LOG.warn("triggering another GC"); + System.gc(); + return false; } - }, 1000, 10*1000); + }, 500, 60*1000); Assert.assertEquals(0, allDataSize.get()); Assert.assertEquals(size, stats.getReadOps()); }