|
@@ -29,6 +29,7 @@ import java.io.FileOutputStream;
|
|
|
import java.io.IOException;
|
|
|
import java.io.InputStreamReader;
|
|
|
import java.io.PrintStream;
|
|
|
+import java.io.PrintWriter;
|
|
|
import java.io.RandomAccessFile;
|
|
|
import java.io.StringReader;
|
|
|
import java.net.HttpURLConnection;
|
|
@@ -64,6 +65,7 @@ import org.apache.hadoop.hdfs.DistributedFileSystem;
|
|
|
import org.apache.hadoop.hdfs.MiniDFSCluster;
|
|
|
import org.apache.hadoop.hdfs.protocol.HdfsConstants.SafeModeAction;
|
|
|
import org.apache.hadoop.hdfs.server.namenode.FSImageTestUtil;
|
|
|
+import org.apache.hadoop.hdfs.server.namenode.NameNodeLayoutVersion;
|
|
|
import org.apache.hadoop.hdfs.web.WebHdfsFileSystem;
|
|
|
import org.apache.hadoop.io.IOUtils;
|
|
|
import org.apache.hadoop.net.NetUtils;
|
|
@@ -499,4 +501,36 @@ public class TestOfflineImageViewer {
|
|
|
Assert.assertEquals("",
|
|
|
GenericTestUtils.getFilesDiff(reverseImageXml, reverseImage2Xml));
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Tests that the ReverseXML processor doesn't accept XML files with the wrong
|
|
|
+ * layoutVersion.
|
|
|
+ */
|
|
|
+ @Test
|
|
|
+ public void testReverseXmlWrongLayoutVersion() throws Throwable {
|
|
|
+ File imageWrongVersion = new File(tempDir, "imageWrongVersion.xml");
|
|
|
+ PrintWriter writer = new PrintWriter(imageWrongVersion, "UTF-8");
|
|
|
+ try {
|
|
|
+ writer.println("<?xml version=\"1.0\"?>");
|
|
|
+ writer.println("<fsimage>");
|
|
|
+ writer.println("<version>");
|
|
|
+ writer.println(String.format("<layoutVersion>%d</layoutVersion>",
|
|
|
+ NameNodeLayoutVersion.CURRENT_LAYOUT_VERSION + 1));
|
|
|
+ writer.println("<onDiskVersion>1</onDiskVersion>");
|
|
|
+ writer.println("<oivRevision>" +
|
|
|
+ "545bbef596c06af1c3c8dca1ce29096a64608478</oivRevision>");
|
|
|
+ writer.println("</version>");
|
|
|
+ writer.println("</fsimage>");
|
|
|
+ } finally {
|
|
|
+ writer.close();
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ OfflineImageReconstructor.run(imageWrongVersion.getAbsolutePath(),
|
|
|
+ imageWrongVersion.getAbsolutePath() + ".out");
|
|
|
+ Assert.fail("Expected OfflineImageReconstructor to fail with " +
|
|
|
+ "version mismatch.");
|
|
|
+ } catch (Throwable t) {
|
|
|
+ GenericTestUtils.assertExceptionContains("Layout version mismatch.", t);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|