Selaa lähdekoodia

HDFS-14054. TestLeaseRecovery2: testHardLeaseRecoveryAfterNameNodeRestart2 and testHardLeaseRecoveryWithRenameAfterNameNodeRestart are flaky. Contributed by Zsolt Venczel.

(cherry picked from commit 993c2140ccfb4c6dfd09c0c686b85a4b58cb39a2)
Inigo Goiri 6 vuotta sitten
vanhempi
commit
b411fcee86

+ 11 - 10
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestLeaseRecovery2.java

@@ -496,7 +496,14 @@ public class TestLeaseRecovery2 {
     
     // set the hard limit to be 1 second 
     cluster.setLeasePeriod(LONG_LEASE_PERIOD, SHORT_LEASE_PERIOD);
-    
+
+    // Normally, the in-progress edit log would be finalized by
+    // FSEditLog#endCurrentLogSegment.  For testing purposes, we
+    // disable that here.
+    FSEditLog spyLog = spy(cluster.getNameNode().getFSImage().getEditLog());
+    doNothing().when(spyLog).endCurrentLogSegment(Mockito.anyBoolean());
+    DFSTestUtil.setEditLogForTesting(cluster.getNamesystem(), spyLog);
+
     // Make sure lease recovery begins.
     final String path = fileStr;
     GenericTestUtils.waitFor(new Supplier<Boolean>() {
@@ -504,16 +511,10 @@ public class TestLeaseRecovery2 {
       public Boolean get() {
         String holder =
             NameNodeAdapter.getLeaseHolderForPath(cluster.getNameNode(), path);
-        return holder.startsWith(HdfsServerConstants.NAMENODE_LEASE_HOLDER);
+        return holder!=null && holder
+            .startsWith(HdfsServerConstants.NAMENODE_LEASE_HOLDER);
       }
-    }, (int)SHORT_LEASE_PERIOD, (int)SHORT_LEASE_PERIOD * 10);
-
-    // Normally, the in-progress edit log would be finalized by
-    // FSEditLog#endCurrentLogSegment.  For testing purposes, we
-    // disable that here.
-    FSEditLog spyLog = spy(cluster.getNameNode().getFSImage().getEditLog());
-    doNothing().when(spyLog).endCurrentLogSegment(Mockito.anyBoolean());
-    DFSTestUtil.setEditLogForTesting(cluster.getNamesystem(), spyLog);
+    }, (int)SHORT_LEASE_PERIOD, (int)SHORT_LEASE_PERIOD * 20);
 
     cluster.restartNameNode(false);