/// <exception cref="System.IO.IOException"/> private void DumpINodeSection(InputStream @in) { FsImageProto.INodeSection s = FsImageProto.INodeSection.ParseDelimitedFrom(@in); @out.Write("<INodeSection>"); O("lastInodeId", s.GetLastInodeId()); for (int i = 0; i < s.GetNumInodes(); ++i) { FsImageProto.INodeSection.INode p = FsImageProto.INodeSection.INode.ParseDelimitedFrom (@in); @out.Write("<inode>"); O("id", p.GetId()).O("type", p.GetType()).O("name", p.GetName().ToStringUtf8()); if (p.HasFile()) { DumpINodeFile(p.GetFile()); } else { if (p.HasDirectory()) { DumpINodeDirectory(p.GetDirectory()); } else { if (p.HasSymlink()) { DumpINodeSymlink(p.GetSymlink()); } } } @out.Write("</inode>\n"); } @out.Write("</INodeSection>\n"); }
/// <summary>Load the filenames of the directories from the INode section.</summary> /// <exception cref="System.IO.IOException"/> private void LoadDirectoriesInINodeSection(InputStream @in) { FsImageProto.INodeSection s = FsImageProto.INodeSection.ParseDelimitedFrom(@in); Log.Info("Loading directories in INode section."); int numDirs = 0; for (int i = 0; i < s.GetNumInodes(); ++i) { FsImageProto.INodeSection.INode p = FsImageProto.INodeSection.INode.ParseDelimitedFrom (@in); if (Log.IsDebugEnabled() && i % 10000 == 0) { Log.Debug("Scanned {} inodes.", i); } if (p.HasDirectory()) { metadataMap.PutDir(p); numDirs++; } } Log.Info("Found {} directories in INode section.", numDirs); }
/// <exception cref="System.IO.IOException"/> public virtual void PutDir(FsImageProto.INodeSection.INode dir) { Preconditions.CheckArgument(dir.HasDirectory(), "INode %s (%s) is not a directory." , dir.GetId(), dir.GetName()); dirMap.Put(ToBytes(dir.GetId()), ToBytes(dir.GetName().ToStringUtf8())); }