Search in sources :

Example 1 with SafeModeException

use of org.apache.hadoop.hdfs.server.namenode.SafeModeException in project hadoop by apache.

the class TestSafeMode method testSafeModeWhenZeroBlockLocations.

@Test
public void testSafeModeWhenZeroBlockLocations() throws IOException {
    try {
        Path file1 = new Path("/tmp/testManualSafeMode/file1");
        Path file2 = new Path("/tmp/testManualSafeMode/file2");
        System.out.println("Created file1 and file2.");
        // create two files with one block each.
        DFSTestUtil.createFile(fs, file1, 1000, (short) 1, 0);
        DFSTestUtil.createFile(fs, file2, 2000, (short) 1, 0);
        checkGetBlockLocationsWorks(fs, file1);
        NameNode namenode = cluster.getNameNode();
        // manually set safemode.
        dfs.setSafeMode(SafeModeAction.SAFEMODE_ENTER);
        assertTrue("should still be in SafeMode", namenode.isInSafeMode());
        // getBlock locations should still work since block locations exists
        checkGetBlockLocationsWorks(fs, file1);
        dfs.setSafeMode(SafeModeAction.SAFEMODE_LEAVE);
        assertFalse("should not be in SafeMode", namenode.isInSafeMode());
        // Now 2nd part of the tests where there aren't block locations
        cluster.shutdownDataNodes();
        cluster.shutdownNameNode(0);
        // now bring up just the NameNode.
        cluster.restartNameNode();
        cluster.waitActive();
        System.out.println("Restarted cluster with just the NameNode");
        namenode = cluster.getNameNode();
        assertTrue("No datanode is started. Should be in SafeMode", namenode.isInSafeMode());
        FileStatus stat = fs.getFileStatus(file1);
        try {
            fs.getFileBlockLocations(stat, 0, 1000);
            assertTrue("Should have got safemode exception", false);
        } catch (SafeModeException e) {
        // as expected 
        } catch (RemoteException re) {
            if (!re.getClassName().equals(SafeModeException.class.getName()))
                assertTrue("Should have got safemode exception", false);
        }
        dfs.setSafeMode(SafeModeAction.SAFEMODE_LEAVE);
        assertFalse("Should not be in safemode", namenode.isInSafeMode());
        checkGetBlockLocationsWorks(fs, file1);
    } finally {
        if (fs != null)
            fs.close();
        if (cluster != null)
            cluster.shutdown();
    }
}
Also used : Path(org.apache.hadoop.fs.Path) NameNode(org.apache.hadoop.hdfs.server.namenode.NameNode) FileStatus(org.apache.hadoop.fs.FileStatus) SafeModeException(org.apache.hadoop.hdfs.server.namenode.SafeModeException) RemoteException(org.apache.hadoop.ipc.RemoteException) Test(org.junit.Test)

Aggregations

FileStatus (org.apache.hadoop.fs.FileStatus)1 Path (org.apache.hadoop.fs.Path)1 NameNode (org.apache.hadoop.hdfs.server.namenode.NameNode)1 SafeModeException (org.apache.hadoop.hdfs.server.namenode.SafeModeException)1 RemoteException (org.apache.hadoop.ipc.RemoteException)1 Test (org.junit.Test)1