浏览代码

HADOOP-10072. TestNfsExports#testMultiMatchers fails due to non-deterministic timing around cache expiry check. Contributed by Chris Nauroth.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1535918 13f79535-47bb-0310-9956-ffa450edef68
Chris Nauroth 11 年之前
父节点
当前提交
7e820b9965

+ 3 - 0
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -449,6 +449,9 @@ Release 2.2.1 - UNRELEASED
     HADOOP-10055. FileSystemShell.apt.vm doc has typo "numRepicas".
     (Akira Ajisaka via cnauroth)
 
+    HADOOP-10072. TestNfsExports#testMultiMatchers fails due to non-deterministic
+    timing around cache expiry check. (cnauroth)
+
 Release 2.2.0 - 2013-10-13
 
   INCOMPATIBLE CHANGES

+ 11 - 2
hadoop-common-project/hadoop-nfs/src/test/java/org/apache/hadoop/nfs/TestNfsExports.java

@@ -35,6 +35,7 @@ public class TestNfsExports {
       Nfs3Constant.EXPORTS_CACHE_EXPIRYTIME_MILLIS_DEFAULT * 1000 * 1000;
   
   private static final int CacheSize = Nfs3Constant.EXPORTS_CACHE_SIZE_DEFAULT;
+  private static final long NanosPerMillis = 1000000;
 
   @Test
   public void testWildcardRW() {
@@ -185,7 +186,15 @@ public class TestNfsExports {
     
     Thread.sleep(1000);
     // no cache for address2 now
-    Assert.assertEquals(AccessPrivilege.NONE,
-        matcher.getAccessPrivilege(address2, address2));
+    AccessPrivilege ap;
+    long startNanos = System.nanoTime();
+    do {
+      ap = matcher.getAccessPrivilege(address2, address2);
+      if (ap == AccessPrivilege.NONE) {
+        break;
+      }
+      Thread.sleep(500);
+    } while ((System.nanoTime() - startNanos) / NanosPerMillis < 5000);
+    Assert.assertEquals(AccessPrivilege.NONE, ap);
   }
 }