/// <summary>save all the snapshottable directories and snapshots to fsimage</summary> /// <exception cref="System.IO.IOException"/> public void SerializeSnapshotSection(OutputStream @out) { SnapshotManager sm = fsn.GetSnapshotManager(); FsImageProto.SnapshotSection.Builder b = FsImageProto.SnapshotSection.NewBuilder( ).SetSnapshotCounter(sm.GetSnapshotCounter()).SetNumSnapshots(sm.GetNumSnapshots ()); INodeDirectory[] snapshottables = sm.GetSnapshottableDirs(); foreach (INodeDirectory sdir in snapshottables) { b.AddSnapshottableDir(sdir.GetId()); } ((FsImageProto.SnapshotSection)b.Build()).WriteDelimitedTo(@out); int i = 0; foreach (INodeDirectory sdir_1 in snapshottables) { foreach (Org.Apache.Hadoop.Hdfs.Server.Namenode.Snapshot.Snapshot s in sdir_1.GetDirectorySnapshottableFeature ().GetSnapshotList()) { Snapshot.Root sroot = s.GetRoot(); FsImageProto.SnapshotSection.Snapshot.Builder sb = FsImageProto.SnapshotSection.Snapshot .NewBuilder().SetSnapshotId(s.GetId()); FsImageProto.INodeSection.INodeDirectory.Builder db = FSImageFormatPBINode.Saver.BuildINodeDirectory (sroot, parent.GetSaverContext()); FsImageProto.INodeSection.INode r = ((FsImageProto.INodeSection.INode)FsImageProto.INodeSection.INode .NewBuilder().SetId(sroot.GetId()).SetType(FsImageProto.INodeSection.INode.Type. Directory).SetName(ByteString.CopyFrom(sroot.GetLocalNameBytes())).SetDirectory( db).Build()); ((FsImageProto.SnapshotSection.Snapshot)sb.SetRoot(r).Build()).WriteDelimitedTo(@out ); i++; if (i % FSImageFormatProtobuf.Saver.CheckCancelInterval == 0) { context.CheckCancelled(); } } } Preconditions.CheckState(i == sm.GetNumSnapshots()); parent.CommitSection(headers, FSImageFormatProtobuf.SectionName.Snapshot); }
internal Snapshot(int id, INodeDirectory dir, INodeDirectory parent) { this.id = id; this.root = new Snapshot.Root(dir); this.root.SetParent(parent); }