Repository: hadoop
Updated Branches:
  refs/heads/branch-2 bcfa6d538 -> 57a0f8486


HDFS-11105. TestRBWBlockInvalidation#testRWRInvalidation fails intermittently. 
Contributed by Yiqun Lin

(cherry picked from commit c90891e7b3afaa66dbca967b83a9997e80e893d8)


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/57a0f848
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/57a0f848
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/57a0f848

Branch: refs/heads/branch-2
Commit: 57a0f84860c400a693efad62ed9c76de59cf55c3
Parents: bcfa6d5
Author: Mingliang Liu <[email protected]>
Authored: Wed Nov 16 13:02:10 2016 -0800
Committer: Mingliang Liu <[email protected]>
Committed: Wed Nov 16 13:06:25 2016 -0800

----------------------------------------------------------------------
 .../TestRBWBlockInvalidation.java               | 45 +++++++++++++++++---
 1 file changed, 39 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/57a0f848/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestRBWBlockInvalidation.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestRBWBlockInvalidation.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestRBWBlockInvalidation.java
index 744e9fa..7db7f0d 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestRBWBlockInvalidation.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestRBWBlockInvalidation.java
@@ -42,8 +42,10 @@ import org.apache.hadoop.hdfs.server.namenode.FSNamesystem;
 import org.apache.hadoop.hdfs.server.namenode.ha.HATestUtil;
 import 
org.apache.hadoop.hdfs.server.namenode.ha.TestDNFencing.RandomDeleterPolicy;
 import org.apache.hadoop.io.IOUtils;
+import org.apache.hadoop.test.GenericTestUtils;
 import org.junit.Test;
 
+import com.google.common.base.Supplier;
 import com.google.common.collect.Lists;
 
 /**
@@ -142,7 +144,7 @@ public class TestRBWBlockInvalidation {
    * were RWR replicas with out-of-date genstamps, the NN could accidentally
    * delete good replicas instead of the bad replicas.
    */
-  @Test(timeout=60000)
+  @Test(timeout=120000)
   public void testRWRInvalidation() throws Exception {
     Configuration conf = new HdfsConfiguration();
 
@@ -157,10 +159,11 @@ public class TestRBWBlockInvalidation {
     // Speed up the test a bit with faster heartbeats.
     conf.setInt(DFSConfigKeys.DFS_HEARTBEAT_INTERVAL_KEY, 1);
 
+    int numFiles = 10;
     // Test with a bunch of separate files, since otherwise the test may
     // fail just due to "good luck", even if a bug is present.
     List<Path> testPaths = Lists.newArrayList();
-    for (int i = 0; i < 10; i++) {
+    for (int i = 0; i < numFiles; i++) {
       testPaths.add(new Path("/test" + i));
     }
     
@@ -177,8 +180,11 @@ public class TestRBWBlockInvalidation {
           out.writeBytes("old gs data\n");
           out.hflush();
         }
-        
-        
+
+        for (Path path : testPaths) {
+          DFSTestUtil.waitReplication(cluster.getFileSystem(), path, (short)2);
+        }
+
         // Shutdown one of the nodes in the pipeline
         DataNodeProperties oldGenstampNode = cluster.stopDataNode(0);
 
@@ -196,7 +202,11 @@ public class TestRBWBlockInvalidation {
           cluster.getFileSystem().setReplication(path, (short)1);
           out.close();
         }
-        
+
+        for (Path path : testPaths) {
+          DFSTestUtil.waitReplication(cluster.getFileSystem(), path, (short)1);
+        }
+
         // Upon restart, there will be two replicas, one with an old genstamp
         // and one current copy. This test wants to ensure that the old 
genstamp
         // copy is the one that is deleted.
@@ -219,7 +229,8 @@ public class TestRBWBlockInvalidation {
         cluster.triggerHeartbeats();
         HATestUtil.waitForDNDeletions(cluster);
         cluster.triggerDeletionReports();
-        
+
+        waitForNumTotalBlocks(cluster, numFiles);
         // Make sure we can still read the blocks.
         for (Path path : testPaths) {
           String ret = DFSTestUtil.readFile(cluster.getFileSystem(), path);
@@ -233,4 +244,26 @@ public class TestRBWBlockInvalidation {
     }
 
   }
+
+  private void waitForNumTotalBlocks(final MiniDFSCluster cluster,
+      final int numTotalBlocks) throws Exception {
+    GenericTestUtils.waitFor(new Supplier<Boolean>() {
+
+      @Override
+      public Boolean get() {
+        try {
+          cluster.triggerBlockReports();
+
+          // Wait total blocks
+          if (cluster.getNamesystem().getBlocksTotal() == numTotalBlocks) {
+            return true;
+          }
+        } catch (Exception ignored) {
+          // Ignore the exception
+        }
+
+        return false;
+      }
+    }, 1000, 60000);
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to