コード例 #1
0
            /// <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);
            }
コード例 #2
0
 internal Snapshot(int id, INodeDirectory dir, INodeDirectory parent)
 {
     this.id   = id;
     this.root = new Snapshot.Root(dir);
     this.root.SetParent(parent);
 }