示例#1
0
        /// <summary>
        /// Iterate through all the elements we're tracking and, if a value was
        /// recorded for it, write it out.
        /// </summary>
        /// <exception cref="System.IO.IOException"/>
        private void WriteLine()
        {
            IEnumerator <ImageVisitor.ImageElement> it = elementsToTrack.GetEnumerator();

            while (it.HasNext())
            {
                ImageVisitor.ImageElement e = it.Next();
                string v = null;
                if (e == ImageVisitor.ImageElement.NumBytes)
                {
                    v = fileSize.ToString();
                }
                else
                {
                    v = elements[e];
                }
                if (v != null)
                {
                    Write(v);
                }
                if (it.HasNext())
                {
                    Write(delimiter);
                }
            }
        }
示例#2
0
        /// <exception cref="System.IO.IOException"/>
        internal override void Visit(ImageVisitor.ImageElement element, string value)
        {
            if (inInode)
            {
                switch (element)
                {
                case ImageVisitor.ImageElement.InodePath:
                {
                    current.path = (value.Equals(string.Empty) ? "/" : value);
                    break;
                }

                case ImageVisitor.ImageElement.Replication:
                {
                    current.replication = System.Convert.ToInt32(value);
                    break;
                }

                case ImageVisitor.ImageElement.NumBytes:
                {
                    current.fileSize += long.Parse(value);
                    break;
                }

                default:
                {
                    break;
                }
                }
            }
        }
示例#3
0
 // Print element, along with associated key/value pair, in brackets
 /// <exception cref="System.IO.IOException"/>
 internal override void VisitEnclosingElement(ImageVisitor.ImageElement element, ImageVisitor.ImageElement
                                              key, string value)
 {
     PrintIndents();
     Write(element + " [" + key + " = " + value + "]\n");
     dc.IncLevel();
 }
示例#4
0
 /// <exception cref="System.IO.IOException"/>
 internal override void VisitEnclosingElement(ImageVisitor.ImageElement element)
 {
     elemQ.Push(element);
     if (element == ImageVisitor.ImageElement.Inode)
     {
         NewLine();
     }
 }
示例#5
0
 /// <exception cref="System.IO.IOException"/>
 internal override void LeaveEnclosingElement()
 {
     ImageVisitor.ImageElement elem = elemQ.Pop();
     if (elem == ImageVisitor.ImageElement.Inode)
     {
         PrintLine();
     }
 }
示例#6
0
 /// <exception cref="System.IO.IOException"/>
 internal override void LeaveEnclosingElement()
 {
     if (tagQ.Count == 0)
     {
         throw new IOException("Tried to exit non-existent enclosing element " + "in FSImage file"
                               );
     }
     ImageVisitor.ImageElement element = tagQ.Pop();
     Write("</" + element.ToString() + ">\n");
 }
示例#7
0
 /// <exception cref="System.IO.IOException"/>
 internal override void VisitEnclosingElement(ImageVisitor.ImageElement element)
 {
     elemS.Push(element);
     if (element == ImageVisitor.ImageElement.Inode || element == ImageVisitor.ImageElement
         .InodeUnderConstruction)
     {
         current = new FileDistributionVisitor.FileContext();
         inInode = true;
     }
 }
示例#8
0
 /// <exception cref="System.IO.IOException"/>
 internal override void VisitEnclosingElement(ImageVisitor.ImageElement element, ImageVisitor.ImageElement
                                              key, string value)
 {
     // Special case as numBlocks is an attribute of the blocks element
     if (key == ImageVisitor.ImageElement.NumBlocks && elements.Contains(ImageVisitor.ImageElement
                                                                         .NumBlocks))
     {
         elements[key] = value;
     }
     elemQ.Push(element);
 }
示例#9
0
 /// <exception cref="System.IO.IOException"/>
 internal override void LeaveEnclosingElement()
 {
     ImageVisitor.ImageElement elem = elemQ.Pop();
     // If we're done with an inode, write out our results and start over
     if (elem == ImageVisitor.ImageElement.Inode || elem == ImageVisitor.ImageElement.
         InodeUnderConstruction)
     {
         WriteLine();
         Write("\n");
         Reset();
     }
 }
示例#10
0
 /// <exception cref="System.IO.IOException"/>
 internal override void Visit(ImageVisitor.ImageElement element, long value)
 {
     if ((element == ImageVisitor.ImageElement.DelegationTokenIdentifierExpiryTime) ||
         (element == ImageVisitor.ImageElement.DelegationTokenIdentifierIssueDate) || (element
                                                                                       == ImageVisitor.ImageElement.DelegationTokenIdentifierMaxDate))
     {
         Visit(element, Sharpen.Extensions.CreateDate(value).ToString());
     }
     else
     {
         Visit(element, System.Convert.ToString(value));
     }
 }
示例#11
0
 /// <exception cref="System.IO.IOException"/>
 internal override void Visit(ImageVisitor.ImageElement element, string value)
 {
     if (element == ImageVisitor.ImageElement.InodePath)
     {
         string filename = Sharpen.Runtime.Substring(value, value.LastIndexOf("/") + 1);
         if (counts.Contains(filename))
         {
             counts[filename] = counts[filename] + 1;
         }
         else
         {
             counts[filename] = 1;
         }
     }
 }
示例#12
0
 /// <exception cref="System.IO.IOException"/>
 internal override void VisitEnclosingElement(ImageVisitor.ImageElement element, ImageVisitor.ImageElement
                                              key, string value)
 {
     elemQ.Push(element);
     if (element == ImageVisitor.ImageElement.Inode)
     {
         NewLine();
     }
     else
     {
         if (element == ImageVisitor.ImageElement.Blocks)
         {
             numBlocks = System.Convert.ToInt32(value);
         }
     }
 }
示例#13
0
 /// <exception cref="System.IO.IOException"/>
 internal override void Visit(ImageVisitor.ImageElement element, string value)
 {
     // Explicitly label the root path
     if (element == ImageVisitor.ImageElement.InodePath && value.Equals(string.Empty))
     {
         value = "/";
     }
     // Special case of file size, which is sum of the num bytes in each block
     if (element == ImageVisitor.ImageElement.NumBytes)
     {
         fileSize += long.Parse(value);
     }
     if (elements.Contains(element) && element != ImageVisitor.ImageElement.NumBytes)
     {
         elements[element] = value;
     }
 }
示例#14
0
 /// <exception cref="System.IO.IOException"/>
 internal override void VisitEnclosingElement(ImageVisitor.ImageElement element, ImageVisitor.ImageElement
                                              key, string value)
 {
     elemS.Push(element);
     if (element == ImageVisitor.ImageElement.Inode || element == ImageVisitor.ImageElement
         .InodeUnderConstruction)
     {
         inInode = true;
     }
     else
     {
         if (element == ImageVisitor.ImageElement.Blocks)
         {
             current.numBlocks = System.Convert.ToInt32(value);
         }
     }
 }
示例#15
0
        /// <exception cref="System.IO.IOException"/>
        internal override void LeaveEnclosingElement()
        {
            ImageVisitor.ImageElement elem = elemS.Pop();
            if (elem != ImageVisitor.ImageElement.Inode && elem != ImageVisitor.ImageElement.
                InodeUnderConstruction)
            {
                return;
            }
            inInode = false;
            if (current.numBlocks < 0)
            {
                totalDirectories++;
                return;
            }
            totalFiles++;
            totalBlocks += current.numBlocks;
            totalSpace  += current.fileSize * current.replication;
            if (maxFileSize < current.fileSize)
            {
                maxFileSize = current.fileSize;
            }
            int high;

            if (current.fileSize > maxSize)
            {
                high = distribution.Length - 1;
            }
            else
            {
                high = (int)Math.Ceil((double)current.fileSize / step);
            }
            distribution[high]++;
            if (totalFiles % 1000000 == 1)
            {
                System.Console.Out.WriteLine("Files processed: " + totalFiles + "  Current: " + current
                                             .path);
            }
        }
示例#16
0
 // Convenience methods to automatically convert value types to strings
 /// <exception cref="System.IO.IOException"/>
 internal virtual void VisitEnclosingElement(ImageVisitor.ImageElement element, ImageVisitor.ImageElement
                                             key, int value)
 {
     VisitEnclosingElement(element, key, Sharpen.Extensions.ToString(value));
 }
示例#17
0
 /// <exception cref="System.IO.IOException"/>
 internal virtual void VisitEnclosingElement(ImageVisitor.ImageElement element, ImageVisitor.ImageElement
                                             key, long value)
 {
     VisitEnclosingElement(element, key, System.Convert.ToString(value));
 }
示例#18
0
 /// <summary>
 /// Begin visiting an element that encloses another element, such as
 /// the beginning of the list of blocks that comprise a file.
 /// </summary>
 /// <param name="element">Element being visited</param>
 /// <exception cref="System.IO.IOException"/>
 internal abstract void VisitEnclosingElement(ImageVisitor.ImageElement element);
示例#19
0
 /// <summary>
 /// Begin visiting an element that encloses another element, such as
 /// the beginning of the list of blocks that comprise a file.
 /// </summary>
 /// <remarks>
 /// Begin visiting an element that encloses another element, such as
 /// the beginning of the list of blocks that comprise a file.
 /// Also provide an additional key and value for the element, such as the
 /// number items within the element.
 /// </remarks>
 /// <param name="element">Element being visited</param>
 /// <param name="key">Key describing the element being visited</param>
 /// <param name="value">Value associated with element being visited</param>
 /// <exception cref="System.IO.IOException"/>
 internal abstract void VisitEnclosingElement(ImageVisitor.ImageElement element, ImageVisitor.ImageElement
                                              key, string value);
示例#20
0
 // Convenience methods to automatically convert numeric value types to strings
 /// <exception cref="System.IO.IOException"/>
 internal virtual void Visit(ImageVisitor.ImageElement element, int value)
 {
     Visit(element, Sharpen.Extensions.ToString(value));
 }
示例#21
0
 /// <exception cref="System.IO.IOException"/>
 internal virtual void Visit(ImageVisitor.ImageElement element, long value)
 {
     Visit(element, System.Convert.ToString(value));
 }
示例#22
0
 /// <exception cref="System.IO.IOException"/>
 internal override void VisitEnclosingElement(ImageVisitor.ImageElement element)
 {
 }
示例#23
0
 /// <summary>Visit non enclosing element of fsimage with specified value.</summary>
 /// <param name="element">FSImage element</param>
 /// <param name="value">Element's value</param>
 /// <exception cref="System.IO.IOException"/>
 internal abstract void Visit(ImageVisitor.ImageElement element, string value);
示例#24
0
 /// <exception cref="System.IO.IOException"/>
 internal override void VisitEnclosingElement(ImageVisitor.ImageElement element, ImageVisitor.ImageElement
                                              key, string value)
 {
 }
示例#25
0
        // Maintain state of location within the image tree and record
        // values needed to display the inode in ls-style format.
        /// <exception cref="System.IO.IOException"/>
        internal override void Visit(ImageVisitor.ImageElement element, string value)
        {
            if (inInode)
            {
                switch (element)
                {
                case ImageVisitor.ImageElement.InodePath:
                {
                    if (value.Equals(string.Empty))
                    {
                        path = "/";
                    }
                    else
                    {
                        path = value;
                    }
                    break;
                }

                case ImageVisitor.ImageElement.PermissionString:
                {
                    perms = value;
                    break;
                }

                case ImageVisitor.ImageElement.Replication:
                {
                    replication = System.Convert.ToInt32(value);
                    break;
                }

                case ImageVisitor.ImageElement.UserName:
                {
                    username = value;
                    break;
                }

                case ImageVisitor.ImageElement.GroupName:
                {
                    group = value;
                    break;
                }

                case ImageVisitor.ImageElement.NumBytes:
                {
                    filesize += long.Parse(value);
                    break;
                }

                case ImageVisitor.ImageElement.ModificationTime:
                {
                    modTime = value;
                    break;
                }

                case ImageVisitor.ImageElement.Symlink:
                {
                    linkTarget = value;
                    break;
                }

                default:
                {
                    // This is OK.  We're not looking for all the values.
                    break;
                }
                }
            }
        }
示例#26
0
 /// <exception cref="System.IO.IOException"/>
 internal override void VisitEnclosingElement(ImageVisitor.ImageElement element, ImageVisitor.ImageElement
                                              key, string value)
 {
     Write("<" + element.ToString() + " " + key + "=\"" + value + "\">\n");
     tagQ.Push(element);
 }
示例#27
0
 /// <exception cref="System.IO.IOException"/>
 internal override void VisitEnclosingElement(ImageVisitor.ImageElement element)
 {
     Write("<" + element.ToString() + ">\n");
     tagQ.Push(element);
 }
示例#28
0
 /// <exception cref="System.IO.IOException"/>
 internal override void Visit(ImageVisitor.ImageElement element, string value)
 {
     WriteTag(element.ToString(), value);
 }
示例#29
0
 /// <exception cref="System.IO.IOException"/>
 internal override void Visit(ImageVisitor.ImageElement element, string value)
 {
     PrintIndents();
     Write(element + " = " + value + "\n");
 }
示例#30
0
 /// <exception cref="System.IO.IOException"/>
 internal override void VisitEnclosingElement(ImageVisitor.ImageElement element)
 {
     PrintIndents();
     Write(element + "\n");
     dc.IncLevel();
 }