Beispiel #1
0
            /// <exception cref="System.IO.IOException"/>
            internal void LoadINodeDirectorySection(InputStream @in)
            {
                IList <INodeReference> refList = parent.GetLoaderContext().GetRefList();

                while (true)
                {
                    FsImageProto.INodeDirectorySection.DirEntry e = FsImageProto.INodeDirectorySection.DirEntry
                                                                    .ParseDelimitedFrom(@in);
                    // note that in is a LimitedInputStream
                    if (e == null)
                    {
                        break;
                    }
                    INodeDirectory p = dir.GetInode(e.GetParent()).AsDirectory();
                    foreach (long id in e.GetChildrenList())
                    {
                        INode child = dir.GetInode(id);
                        AddToParent(p, child);
                    }
                    foreach (int refId in e.GetRefChildrenList())
                    {
                        INodeReference @ref = refList[refId];
                        AddToParent(p, @ref);
                    }
                }
            }
 /// <exception cref="System.IO.IOException"/>
 private void DumpINodeDirectorySection(InputStream @in)
 {
     @out.Write("<INodeDirectorySection>");
     while (true)
     {
         FsImageProto.INodeDirectorySection.DirEntry e = FsImageProto.INodeDirectorySection.DirEntry
                                                         .ParseDelimitedFrom(@in);
         // note that in is a LimitedInputStream
         if (e == null)
         {
             break;
         }
         @out.Write("<directory>");
         O("parent", e.GetParent());
         foreach (long id in e.GetChildrenList())
         {
             O("inode", id);
         }
         foreach (int refId in e.GetRefChildrenList())
         {
             O("inodereference-index", refId);
         }
         @out.Write("</directory>\n");
     }
     @out.Write("</INodeDirectorySection>\n");
 }
        /// <summary>Scan the INodeDirectory section to construct the namespace.</summary>
        /// <exception cref="System.IO.IOException"/>
        private void BuildNamespace(InputStream @in)
        {
            int count = 0;

            while (true)
            {
                FsImageProto.INodeDirectorySection.DirEntry e = FsImageProto.INodeDirectorySection.DirEntry
                                                                .ParseDelimitedFrom(@in);
                if (e == null)
                {
                    break;
                }
                count++;
                if (Log.IsDebugEnabled() && count % 10000 == 0)
                {
                    Log.Debug("Scanned {} directories.", count);
                }
                long parentId = e.GetParent();
                // Referred INode is not support for now.
                for (int i = 0; i < e.GetChildrenCount(); i++)
                {
                    long childId = e.GetChildren(i);
                    metadataMap.PutDirChild(parentId, childId);
                }
                Preconditions.CheckState(e.GetRefChildrenCount() == 0);
            }
            Log.Info("Scanned {} INode directories to build namespace.", count);
        }
Beispiel #4
0
        /// <exception cref="System.IO.IOException"/>
        private static IDictionary <long, long[]> LoadINodeDirectorySection(InputStream @in
                                                                            , IList <long> refIdList)
        {
            Log.Info("Loading inode directory section");
            IDictionary <long, long[]> dirs = Maps.NewHashMap();
            long counter = 0;

            while (true)
            {
                FsImageProto.INodeDirectorySection.DirEntry e = FsImageProto.INodeDirectorySection.DirEntry
                                                                .ParseDelimitedFrom(@in);
                // note that in is a LimitedInputStream
                if (e == null)
                {
                    break;
                }
                ++counter;
                long[] l = new long[e.GetChildrenCount() + e.GetRefChildrenCount()];
                for (int i = 0; i < e.GetChildrenCount(); ++i)
                {
                    l[i] = e.GetChildren(i);
                }
                for (int i_1 = e.GetChildrenCount(); i_1 < l.Length; i_1++)
                {
                    int refId = e.GetRefChildren(i_1 - e.GetChildrenCount());
                    l[i_1] = refIdList[refId];
                }
                dirs[e.GetParent()] = l;
            }
            Log.Info("Loaded " + counter + " directories");
            return(dirs);
        }
Beispiel #5
0
            /// <exception cref="System.IO.IOException"/>
            internal void SerializeINodeDirectorySection(OutputStream @out)
            {
                IEnumerator <INodeWithAdditionalFields> iter = fsn.GetFSDirectory().GetINodeMap().
                                                               GetMapIterator();
                AList <INodeReference> refList = parent.GetSaverContext().GetRefList();
                int i = 0;

                while (iter.HasNext())
                {
                    INodeWithAdditionalFields n = iter.Next();
                    if (!n.IsDirectory())
                    {
                        continue;
                    }
                    ReadOnlyList <INode> children = n.AsDirectory().GetChildrenList(Org.Apache.Hadoop.Hdfs.Server.Namenode.Snapshot.Snapshot
                                                                                    .CurrentStateId);
                    if (children.Size() > 0)
                    {
                        FsImageProto.INodeDirectorySection.DirEntry.Builder b = FsImageProto.INodeDirectorySection.DirEntry
                                                                                .NewBuilder().SetParent(n.GetId());
                        foreach (INode inode in children)
                        {
                            if (!inode.IsReference())
                            {
                                b.AddChildren(inode.GetId());
                            }
                            else
                            {
                                refList.AddItem(inode.AsReference());
                                b.AddRefChildren(refList.Count - 1);
                            }
                        }
                        FsImageProto.INodeDirectorySection.DirEntry e = ((FsImageProto.INodeDirectorySection.DirEntry
                                                                          )b.Build());
                        e.WriteDelimitedTo(@out);
                    }
                    ++i;
                    if (i % FSImageFormatProtobuf.Saver.CheckCancelInterval == 0)
                    {
                        context.CheckCancelled();
                    }
                }
                parent.CommitSection(summary, FSImageFormatProtobuf.SectionName.InodeDir);
            }