From e1d9e5ab828d7de265e7cbd280d1cf4db968f1e9 Mon Sep 17 00:00:00 2001 From: Colin Patrick Mccabe Date: Mon, 18 Apr 2016 11:45:18 -0700 Subject: [PATCH] HDFS-10265. OEV tool fails to read edit xml file if OP_UPDATE_BLOCKS has no BLOCK tag (Wan Chang via cmccabe) (cherry picked from commit cb3ca460efb97be8c031bdb14bb7705cc25f2117) (cherry picked from commit a69b6b1e8b1e734ba9a106061cc6d22583d1d2d1) --- .../hadoop/hdfs/server/namenode/FSEditLogOp.java | 3 ++- .../java/org/apache/hadoop/hdfs/DFSTestUtil.java | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java index 29220318e3f..41be4405985 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java @@ -1113,7 +1113,8 @@ protected void toXml(ContentHandler contentHandler) throws SAXException { @Override void fromXml(Stanza st) throws InvalidXmlException { this.path = st.getValue("PATH"); - List blocks = st.getChildren("BLOCK"); + List blocks = st.hasChildren("BLOCK") ? + st.getChildren("BLOCK") : new ArrayList(); this.blocks = new Block[blocks.size()]; for (int i = 0; i < blocks.size(); i++) { this.blocks[i] = FSEditLogOp.blockFromXml(blocks.get(i)); diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/DFSTestUtil.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/DFSTestUtil.java index da247f78ee2..d6dcf0cb4b6 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/DFSTestUtil.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/DFSTestUtil.java @@ -1267,6 +1267,18 @@ public static void runOperations(MiniDFSCluster cluster, // OP_APPEND 47 FSDataOutputStream s2 = filesystem.append(pathFileCreate, 4096, null); s2.close(); + + // OP_UPDATE_BLOCKS 25 + final String updateBlockFile = "/update_blocks"; + FSDataOutputStream fout = filesystem.create(new Path(updateBlockFile), true, 4096, (short)1, 4096L); + fout.write(1); + fout.hflush(); + long fileId = ((DFSOutputStream)fout.getWrappedStream()).getFileId(); + DFSClient dfsclient = DFSClientAdapter.getDFSClient(filesystem); + LocatedBlocks blocks = dfsclient.getNamenode().getBlockLocations(updateBlockFile, 0, Integer.MAX_VALUE); + dfsclient.getNamenode().abandonBlock(blocks.get(0).getBlock(), fileId, updateBlockFile, dfsclient.clientName); + fout.close(); + // OP_SET_STORAGE_POLICY 45 filesystem.setStoragePolicy(pathFileCreate, HdfsConstants.HOT_STORAGE_POLICY_NAME);