HDFS-7287. The OfflineImageViewer (OIV) can output invalid XML depending on the filename (Ravi Prakash via Colin P. McCabe)
(cherry picked from commit d33e07dc49e00db138921fb3aa52c4ef00510161) (cherry picked from commit 112d69408630068f297616f7bac4b106f5eaa402)
This commit is contained in:
parent
2f62716441
commit
5a0285fa9a
@ -850,6 +850,9 @@ Release 2.6.0 - UNRELEASED
|
||||
HDFS-7128. Decommission slows way down when it gets towards the end.
|
||||
(Ming Ma via cnauroth)
|
||||
|
||||
HDFS-7287. The OfflineImageViewer (OIV) can output invalid XML depending on
|
||||
the filename (Ravi Prakash via Colin P. McCabe)
|
||||
|
||||
BREAKDOWN OF HDFS-6584 ARCHIVAL STORAGE
|
||||
|
||||
HDFS-6677. Change INodeFile and FSImage to support storage policy ID.
|
||||
|
@ -49,6 +49,7 @@
|
||||
import org.apache.hadoop.hdfs.server.namenode.FsImageProto.SnapshotDiffSection;
|
||||
import org.apache.hadoop.hdfs.server.namenode.FsImageProto.SnapshotSection;
|
||||
import org.apache.hadoop.hdfs.server.namenode.FsImageProto.StringTableSection;
|
||||
import org.apache.hadoop.hdfs.util.XMLUtils;
|
||||
import org.apache.hadoop.io.IOUtils;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
@ -410,7 +411,7 @@ private void loadStringTable(InputStream in) throws IOException {
|
||||
}
|
||||
|
||||
private PBImageXmlWriter o(final String e, final Object v) {
|
||||
out.print("<" + e + ">" + v + "</" + e + ">");
|
||||
out.print("<" + e + ">" + XMLUtils.mangleXmlString(v.toString()) + "</" + e + ">");
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
import java.io.IOException;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import org.apache.hadoop.hdfs.util.XMLUtils;
|
||||
/**
|
||||
* An XmlImageVisitor walks over an fsimage structure and writes out
|
||||
* an equivalent XML document that contains the fsimage's components.
|
||||
@ -83,6 +84,6 @@ void visitEnclosingElement(ImageElement element,
|
||||
}
|
||||
|
||||
private void writeTag(String tag, String value) throws IOException {
|
||||
write("<" + tag + ">" + value + "</" + tag + ">\n");
|
||||
write("<" + tag + ">" + XMLUtils.mangleXmlString(value) + "</" + tag + ">\n");
|
||||
}
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.RandomAccessFile;
|
||||
@ -125,6 +126,10 @@ public static void createOriginalFSImage() throws IOException {
|
||||
hdfs.mkdirs(emptydir);
|
||||
writtenFiles.put(emptydir.toString(), hdfs.getFileStatus(emptydir));
|
||||
|
||||
//Create a directory whose name should be escaped in XML
|
||||
Path invalidXMLDir = new Path("/dirContainingInvalidXMLChar\u0000here");
|
||||
hdfs.mkdirs(invalidXMLDir);
|
||||
|
||||
// Get delegation tokens so we log the delegation token op
|
||||
Token<?>[] delegationTokens = hdfs
|
||||
.addDelegationTokens(TEST_RENEWER, null);
|
||||
@ -220,7 +225,7 @@ public void testFileDistributionCalculator() throws IOException {
|
||||
assertTrue(matcher.find() && matcher.groupCount() == 1);
|
||||
int totalDirs = Integer.parseInt(matcher.group(1));
|
||||
// totalDirs includes root directory, empty directory, and xattr directory
|
||||
assertEquals(NUM_DIRS + 3, totalDirs);
|
||||
assertEquals(NUM_DIRS + 4, totalDirs);
|
||||
|
||||
FileStatus maxFile = Collections.max(writtenFiles.values(),
|
||||
new Comparator<FileStatus>() {
|
||||
@ -273,7 +278,7 @@ public void testWebImageViewer() throws IOException, InterruptedException,
|
||||
|
||||
// verify the number of directories
|
||||
FileStatus[] statuses = webhdfs.listStatus(new Path("/"));
|
||||
assertEquals(NUM_DIRS + 2, statuses.length); // contains empty and xattr directory
|
||||
assertEquals(NUM_DIRS + 3, statuses.length); // contains empty and xattr directory
|
||||
|
||||
// verify the number of files in the directory
|
||||
statuses = webhdfs.listStatus(new Path("/dir0"));
|
||||
|
Loading…
x
Reference in New Issue
Block a user