Repository: hadoop Updated Branches: refs/heads/branch-2.7 13414be1a -> e3b809a28
HDFS-9696. Garbage snapshot records linger forever. Contributed by Kihwal Lee (cherry picked from commit 83e57e083f2cf6c0de8a46966c5492faeabd8f2a) Conflicts: hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestSaveNamespace.java (cherry picked from commit 4766a3153dd517ac832d4761c884ed88a83a6c09) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/e3b809a2 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/e3b809a2 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/e3b809a2 Branch: refs/heads/branch-2.7 Commit: e3b809a284ba689034d9aa82ecd51e79f810911f Parents: 13414be Author: Kihwal Lee <kih...@apache.org> Authored: Mon Aug 15 13:17:02 2016 -0500 Committer: Kihwal Lee <kih...@apache.org> Committed: Mon Aug 15 13:17:02 2016 -0500 ---------------------------------------------------------------------- .../server/namenode/FSImageFormatProtobuf.java | 6 ++- .../hdfs/server/namenode/TestSaveNamespace.java | 41 ++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/e3b809a2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormatProtobuf.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormatProtobuf.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormatProtobuf.java index 0340401..adade58 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormatProtobuf.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormatProtobuf.java @@ -443,7 +443,11 @@ public final class FSImageFormatProtobuf { this, summary, context, context.getSourceNamesystem()); snapshotSaver.serializeSnapshotSection(sectionOutputStream); - snapshotSaver.serializeSnapshotDiffSection(sectionOutputStream); + // Skip snapshot-related sections when there is no snapshot. + if (context.getSourceNamesystem().getSnapshotManager() + .getNumSnapshots() > 0) { + snapshotSaver.serializeSnapshotDiffSection(sectionOutputStream); + } snapshotSaver.serializeINodeReferenceSection(sectionOutputStream); } http://git-wip-us.apache.org/repos/asf/hadoop/blob/e3b809a2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestSaveNamespace.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestSaveNamespace.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestSaveNamespace.java index 5151bf5..3d79c27 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestSaveNamespace.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestSaveNamespace.java @@ -625,6 +625,47 @@ public class TestSaveNamespace { } } + @Test + public void testSkipSnapshotSection() throws Exception { + MiniDFSCluster cluster = new MiniDFSCluster.Builder(new Configuration()) + .numDataNodes(1).build(); + cluster.waitActive(); + DistributedFileSystem fs = cluster.getFileSystem(); + OutputStream out = null; + try { + String path = "/skipSnapshot"; + out = fs.create(new Path(path)); + out.close(); + + // add a bogus filediff + FSDirectory dir = cluster.getNamesystem().getFSDirectory(); + INodeFile file = dir.getINode(path).asFile(); + file.addSnapshotFeature(null).getDiffs() + .saveSelf2Snapshot(-1, file, null, false); + + // make sure it has a diff + assertTrue("Snapshot fileDiff is missing.", + file.getFileWithSnapshotFeature().getDiffs() != null); + + // saveNamespace + fs.setSafeMode(SafeModeAction.SAFEMODE_ENTER); + cluster.getNameNodeRpc().saveNamespace(); + fs.setSafeMode(SafeModeAction.SAFEMODE_LEAVE); + + // restart namenode + cluster.restartNameNode(true); + dir = cluster.getNamesystem().getFSDirectory(); + file = dir.getINode(path).asFile(); + + // there should be no snapshot feature for the inode, when there is + // no snapshot. + assertTrue("There should be no snapshot feature for this INode.", + file.getFileWithSnapshotFeature() == null); + } finally { + cluster.shutdown(); + } + } + private void doAnEdit(FSNamesystem fsn, int id) throws IOException { // Make an edit fsn.mkdirs( --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org