You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by st...@apache.org on 2022/04/13 16:32:49 UTC
[hadoop] 02/16: HDFS-16437 ReverseXML processor doesn't accept XML files without the … (#3926)
This is an automated email from the ASF dual-hosted git repository.
stevel pushed a commit to branch branch-3.3.3
in repository https://gitbox.apache.org/repos/asf/hadoop.git
commit 6534f0d4fdea48a3c8dd7df12b0048fdf3b3c233
Author: singer-bin <m1...@163.com>
AuthorDate: Sun Feb 6 13:05:57 2022 +0800
HDFS-16437 ReverseXML processor doesn't accept XML files without the … (#3926)
(cherry picked from commit 125e3b616040b4f98956aa946cc51e99f7d596c2)
Change-Id: I03e4f2af17f0e4a8245c9c2c8ea1cb2cb41f777a
---
.../OfflineImageReconstructor.java | 4 +++
.../offlineImageViewer/TestOfflineImageViewer.java | 42 +++++++++++++++++++---
2 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/OfflineImageReconstructor.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/OfflineImageReconstructor.java
index 9ad4b090649..203bcc13284 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/OfflineImageReconstructor.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/OfflineImageReconstructor.java
@@ -1761,6 +1761,10 @@ class OfflineImageReconstructor {
XMLEvent ev = expectTag("[section header]", true);
if (ev.getEventType() == XMLStreamConstants.END_ELEMENT) {
if (ev.asEndElement().getName().getLocalPart().equals("fsimage")) {
+ if(unprocessedSections.size() == 1 && unprocessedSections.contains
+ (SnapshotDiffSectionProcessor.NAME)){
+ break;
+ }
throw new IOException("FSImage XML ended prematurely, without " +
"including section(s) " + StringUtils.join(", ",
unprocessedSections));
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/TestOfflineImageViewer.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/TestOfflineImageViewer.java
index 7bf3bfc1f8e..8980e18b68e 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/TestOfflineImageViewer.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/TestOfflineImageViewer.java
@@ -1122,17 +1122,17 @@ public class TestOfflineImageViewer {
LOG.info("Creating reverseImage.xml=" + reverseImageXml.getAbsolutePath() +
", reverseImage=" + reverseImage.getAbsolutePath() +
", reverseImage2Xml=" + reverseImage2Xml.getAbsolutePath());
- if (OfflineImageViewerPB.run(new String[] { "-p", "XML",
+ if (OfflineImageViewerPB.run(new String[] {"-p", "XML",
"-i", originalFsimage.getAbsolutePath(),
"-o", reverseImageXml.getAbsolutePath() }) != 0) {
throw new IOException("oiv returned failure creating first XML file.");
}
- if (OfflineImageViewerPB.run(new String[] { "-p", "ReverseXML",
+ if (OfflineImageViewerPB.run(new String[] {"-p", "ReverseXML",
"-i", reverseImageXml.getAbsolutePath(),
"-o", reverseImage.getAbsolutePath() }) != 0) {
throw new IOException("oiv returned failure recreating fsimage file.");
}
- if (OfflineImageViewerPB.run(new String[] { "-p", "XML",
+ if (OfflineImageViewerPB.run(new String[] {"-p", "XML",
"-i", reverseImage.getAbsolutePath(),
"-o", reverseImage2Xml.getAbsolutePath() }) != 0) {
throw new IOException("oiv returned failure creating second " +
@@ -1141,7 +1141,7 @@ public class TestOfflineImageViewer {
// The XML file we wrote based on the re-created fsimage should be the
// same as the one we dumped from the original fsimage.
Assert.assertEquals("",
- GenericTestUtils.getFilesDiff(reverseImageXml, reverseImage2Xml));
+ GenericTestUtils.getFilesDiff(reverseImageXml, reverseImage2Xml));
}
/**
@@ -1176,6 +1176,40 @@ public class TestOfflineImageViewer {
}
}
+ /**
+ * Tests that the ReverseXML processor doesn't accept XML files without the SnapshotDiffSection.
+ */
+ @Test
+ public void testReverseXmlWithoutSnapshotDiffSection() throws Throwable {
+ File imageWSDS = new File(tempDir, "imageWithoutSnapshotDiffSection.xml");
+ try(PrintWriter writer = new PrintWriter(imageWSDS, "UTF-8")) {
+ writer.println("<?xml version=\"1.0\"?>");
+ writer.println("<fsimage>");
+ writer.println("<version>");
+ writer.println("<layoutVersion>-66</layoutVersion>");
+ writer.println("<onDiskVersion>1</onDiskVersion>");
+ writer.println("<oivRevision>545bbef596c06af1c3c8dca1ce29096a64608478</oivRevision>");
+ writer.println("</version>");
+ writer.println("<FileUnderConstructionSection></FileUnderConstructionSection>");
+ writer.println("<ErasureCodingSection></ErasureCodingSection>");
+ writer.println("<INodeSection><lastInodeId>91488</lastInodeId><numInodes>0</numInodes>" +
+ "</INodeSection>");
+ writer.println("<SecretManagerSection><currentId>90</currentId><tokenSequenceNumber>35" +
+ "</tokenSequenceNumber><numDelegationKeys>0</numDelegationKeys><numTokens>0" +
+ "</numTokens></SecretManagerSection>");
+ writer.println("<INodeReferenceSection></INodeReferenceSection>");
+ writer.println("<SnapshotSection><snapshotCounter>0</snapshotCounter><numSnapshots>0" +
+ "</numSnapshots></SnapshotSection>");
+ writer.println("<NameSection><namespaceId>326384987</namespaceId></NameSection>");
+ writer.println("<CacheManagerSection><nextDirectiveId>1</nextDirectiveId><numPools>0" +
+ "</numPools><numDirectives>0</numDirectives></CacheManagerSection>");
+ writer.println("<INodeDirectorySection></INodeDirectorySection>");
+ writer.println("</fsimage>");
+ }
+ OfflineImageReconstructor.run(imageWSDS.getAbsolutePath(),
+ imageWSDS.getAbsolutePath() + ".out");
+ }
+
@Test
public void testFileDistributionCalculatorForException() throws Exception {
File fsimageFile = null;
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org