public virtual void TestSnapshotOnRoot() { Path root = new Path("/"); hdfs.AllowSnapshot(root); hdfs.CreateSnapshot(root, "s1"); cluster.Shutdown(); cluster = new MiniDFSCluster.Builder(conf).Format(false).NumDataNodes(Replication ).Build(); cluster.WaitActive(); fsn = cluster.GetNamesystem(); hdfs = cluster.GetFileSystem(); // save namespace and restart cluster hdfs.SetSafeMode(HdfsConstants.SafeModeAction.SafemodeEnter); hdfs.SaveNamespace(); hdfs.SetSafeMode(HdfsConstants.SafeModeAction.SafemodeLeave); cluster.Shutdown(); cluster = new MiniDFSCluster.Builder(conf).Format(false).NumDataNodes(Replication ).Build(); cluster.WaitActive(); fsn = cluster.GetNamesystem(); hdfs = cluster.GetFileSystem(); INodeDirectory rootNode = fsn.dir.GetINode4Write(root.ToString()).AsDirectory(); NUnit.Framework.Assert.IsTrue("The children list of root should be empty", rootNode .GetChildrenList(Org.Apache.Hadoop.Hdfs.Server.Namenode.Snapshot.Snapshot.CurrentStateId ).IsEmpty()); // one snapshot on root: s1 IList <DirectoryWithSnapshotFeature.DirectoryDiff> diffList = rootNode.GetDiffs(). AsList(); NUnit.Framework.Assert.AreEqual(1, diffList.Count); Org.Apache.Hadoop.Hdfs.Server.Namenode.Snapshot.Snapshot s1 = rootNode.GetSnapshot (DFSUtil.String2Bytes("s1")); NUnit.Framework.Assert.AreEqual(s1.GetId(), diffList[0].GetSnapshotId()); // check SnapshotManager's snapshottable directory list NUnit.Framework.Assert.AreEqual(1, fsn.GetSnapshotManager().GetNumSnapshottableDirs ()); SnapshottableDirectoryStatus[] sdirs = fsn.GetSnapshotManager().GetSnapshottableDirListing (null); NUnit.Framework.Assert.AreEqual(root, sdirs[0].GetFullPath()); // save namespace and restart cluster hdfs.SetSafeMode(HdfsConstants.SafeModeAction.SafemodeEnter); hdfs.SaveNamespace(); hdfs.SetSafeMode(HdfsConstants.SafeModeAction.SafemodeLeave); cluster.Shutdown(); cluster = new MiniDFSCluster.Builder(conf).Format(false).NumDataNodes(Replication ).Build(); cluster.WaitActive(); fsn = cluster.GetNamesystem(); hdfs = cluster.GetFileSystem(); }