HDFS-4863. The root directory should be added to the snapshottable directory list while loading fsimage. Contributed by Jing Zhao

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1487698 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jing Zhao 2013-05-30 01:38:54 +00:00
parent a720a524e9
commit a0abed41a0
3 changed files with 27 additions and 4 deletions

View File

@ -613,6 +613,9 @@ Trunk (Unreleased)
HDFS-4857. Snapshot.Root and AbstractINodeDiff#snapshotINode should not be HDFS-4857. Snapshot.Root and AbstractINodeDiff#snapshotINode should not be
put into INodeMap when loading FSImage. (jing9) put into INodeMap when loading FSImage. (jing9)
HDFS-4863. The root directory should be added to the snapshottable
directory list while loading fsimage. (jing9)
Release 2.0.5-beta - UNRELEASED Release 2.0.5-beta - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -435,13 +435,16 @@ private void loadDirectoryWithSnapshot(DataInput in)
if (numSnapshots >= 0) { if (numSnapshots >= 0) {
final INodeDirectorySnapshottable snapshottableParent final INodeDirectorySnapshottable snapshottableParent
= INodeDirectorySnapshottable.valueOf(parent, parent.getLocalName()); = INodeDirectorySnapshottable.valueOf(parent, parent.getLocalName());
if (snapshottableParent.getParent() != null) { // not root
this.namesystem.getSnapshotManager().addSnapshottable(
snapshottableParent);
}
// load snapshots and snapshotQuota // load snapshots and snapshotQuota
SnapshotFSImageFormat.loadSnapshotList(snapshottableParent, SnapshotFSImageFormat.loadSnapshotList(snapshottableParent,
numSnapshots, in, this); numSnapshots, in, this);
if (snapshottableParent.getSnapshotQuota() > 0) {
// add the directory to the snapshottable directory list in
// SnapshotManager. Note that we only add root when its snapshot quota
// is positive.
this.namesystem.getSnapshotManager().addSnapshottable(
snapshottableParent);
}
} }
// Step 3. Load children nodes under parent // Step 3. Load children nodes under parent

View File

@ -200,6 +200,23 @@ public void testSnapshotOnRoot() throws Exception {
List<DirectoryDiff> diffList = rootNode.getDiffs().asList(); List<DirectoryDiff> diffList = rootNode.getDiffs().asList();
assertEquals(1, diffList.size()); assertEquals(1, diffList.size());
assertEquals("s1", diffList.get(0).getSnapshot().getRoot().getLocalName()); assertEquals("s1", diffList.get(0).getSnapshot().getRoot().getLocalName());
// check SnapshotManager's snapshottable directory list
assertEquals(1, fsn.getSnapshotManager().getNumSnapshottableDirs());
SnapshottableDirectoryStatus[] sdirs = fsn.getSnapshotManager()
.getSnapshottableDirListing(null);
assertEquals(root, sdirs[0].getFullPath());
// save namespace and restart cluster
hdfs.setSafeMode(SafeModeAction.SAFEMODE_ENTER);
hdfs.saveNamespace();
hdfs.setSafeMode(SafeModeAction.SAFEMODE_LEAVE);
cluster.shutdown();
cluster = new MiniDFSCluster.Builder(conf).format(false)
.numDataNodes(REPLICATION).build();
cluster.waitActive();
fsn = cluster.getNamesystem();
hdfs = cluster.getFileSystem();
} }
/** /**