|
@@ -34,9 +34,12 @@ import org.apache.hadoop.hdfs.DFSTestUtil;
|
|
|
import org.apache.hadoop.hdfs.HdfsConfiguration;
|
|
|
import org.apache.hadoop.hdfs.MiniDFSCluster;
|
|
|
import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.NamenodeRole;
|
|
|
+import org.apache.hadoop.hdfs.server.namenode.ha.HAContext;
|
|
|
+import org.apache.hadoop.hdfs.server.namenode.ha.HAState;
|
|
|
import org.junit.After;
|
|
|
import org.junit.Test;
|
|
|
import org.mockito.Mockito;
|
|
|
+import org.mockito.internal.util.reflection.Whitebox;
|
|
|
|
|
|
public class TestFSNamesystem {
|
|
|
|
|
@@ -104,4 +107,39 @@ public class TestFSNamesystem {
|
|
|
assertTrue("After entering safemode due to low resources FSNamesystem."
|
|
|
+ "isInSafeMode still returned false", fsn.isInSafeMode());
|
|
|
}
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testReplQueuesActiveAfterStartupSafemode() throws IOException, InterruptedException{
|
|
|
+ Configuration conf = new Configuration();
|
|
|
+
|
|
|
+ FSEditLog fsEditLog = Mockito.mock(FSEditLog.class);
|
|
|
+ FSImage fsImage = Mockito.mock(FSImage.class);
|
|
|
+ Mockito.when(fsImage.getEditLog()).thenReturn(fsEditLog);
|
|
|
+
|
|
|
+ FSNamesystem fsNamesystem = new FSNamesystem(conf, fsImage);
|
|
|
+ FSNamesystem fsn = Mockito.spy(fsNamesystem);
|
|
|
+
|
|
|
+ //Make shouldPopulaeReplQueues return true
|
|
|
+ HAContext haContext = Mockito.mock(HAContext.class);
|
|
|
+ HAState haState = Mockito.mock(HAState.class);
|
|
|
+ Mockito.when(haContext.getState()).thenReturn(haState);
|
|
|
+ Mockito.when(haState.shouldPopulateReplQueues()).thenReturn(true);
|
|
|
+ Whitebox.setInternalState(fsn, "haContext", haContext);
|
|
|
+
|
|
|
+ //Make NameNode.getNameNodeMetrics() not return null
|
|
|
+ NameNode.initMetrics(conf, NamenodeRole.NAMENODE);
|
|
|
+
|
|
|
+ fsn.enterSafeMode(false);
|
|
|
+ assertTrue("FSNamesystem didn't enter safemode", fsn.isInSafeMode());
|
|
|
+ assertTrue("Replication queues were being populated during very first "
|
|
|
+ + "safemode", !fsn.isPopulatingReplQueues());
|
|
|
+ fsn.leaveSafeMode();
|
|
|
+ assertTrue("FSNamesystem didn't leave safemode", !fsn.isInSafeMode());
|
|
|
+ assertTrue("Replication queues weren't being populated even after leaving "
|
|
|
+ + "safemode", fsn.isPopulatingReplQueues());
|
|
|
+ fsn.enterSafeMode(false);
|
|
|
+ assertTrue("FSNamesystem didn't enter safemode", fsn.isInSafeMode());
|
|
|
+ assertTrue("Replication queues weren't being populated after entering "
|
|
|
+ + "safemode 2nd time", fsn.isPopulatingReplQueues());
|
|
|
+ }
|
|
|
}
|