HDFS-16437 ReverseXML processor doesn't accept XML files without the … (#3926)
(cherry picked from commit 125e3b6160
)
This commit is contained in:
parent
709e617a84
commit
ce7cabb771
|
@ -1761,6 +1761,10 @@ class OfflineImageReconstructor {
|
||||||
XMLEvent ev = expectTag("[section header]", true);
|
XMLEvent ev = expectTag("[section header]", true);
|
||||||
if (ev.getEventType() == XMLStreamConstants.END_ELEMENT) {
|
if (ev.getEventType() == XMLStreamConstants.END_ELEMENT) {
|
||||||
if (ev.asEndElement().getName().getLocalPart().equals("fsimage")) {
|
if (ev.asEndElement().getName().getLocalPart().equals("fsimage")) {
|
||||||
|
if(unprocessedSections.size() == 1 && unprocessedSections.contains
|
||||||
|
(SnapshotDiffSectionProcessor.NAME)){
|
||||||
|
break;
|
||||||
|
}
|
||||||
throw new IOException("FSImage XML ended prematurely, without " +
|
throw new IOException("FSImage XML ended prematurely, without " +
|
||||||
"including section(s) " + StringUtils.join(", ",
|
"including section(s) " + StringUtils.join(", ",
|
||||||
unprocessedSections));
|
unprocessedSections));
|
||||||
|
|
|
@ -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>-67</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
|
@Test
|
||||||
public void testFileDistributionCalculatorForException() throws Exception {
|
public void testFileDistributionCalculatorForException() throws Exception {
|
||||||
File fsimageFile = null;
|
File fsimageFile = null;
|
||||||
|
|
Loading…
Reference in New Issue