/// <summary>Checks that the edits file has all opCodes</summary> /// <param name="filename">edits file</param> /// <returns>true is edits (filename) has all opCodes</returns> /// <exception cref="System.IO.IOException"/> private bool HasAllOpCodes(string inFilename) { string outFilename = inFilename + ".stats"; FileOutputStream fout = new FileOutputStream(outFilename); StatisticsEditsVisitor visitor = new StatisticsEditsVisitor(fout); Org.Apache.Hadoop.Hdfs.Tools.OfflineEditsViewer.OfflineEditsViewer oev = new Org.Apache.Hadoop.Hdfs.Tools.OfflineEditsViewer.OfflineEditsViewer (); if (oev.Go(inFilename, outFilename, "stats", new OfflineEditsViewer.Flags(), visitor ) != 0) { return(false); } Log.Info("Statistics for " + inFilename + "\n" + visitor.GetStatisticsString()); bool hasAllOpCodes = true; foreach (FSEditLogOpCodes opCode in FSEditLogOpCodes.Values()) { // don't need to test obsolete opCodes if (skippedOps.Contains(opCode)) { continue; } long count = visitor.GetStatistics()[opCode]; if ((count == null) || (count == 0)) { hasAllOpCodes = false; Log.Info("Opcode " + opCode + " not tested in " + inFilename); } } return(hasAllOpCodes); }
/// <summary>Factory function that creates an EditsVisitor object</summary> /// <param name="filename">output filename</param> /// <param name="processor">type of visitor to create</param> /// <param name="printToScreen">parameter passed to visitor constructor</param> /// <returns>EditsVisitor for appropriate output format (binary, xml, etc.)</returns> /// <exception cref="System.IO.IOException"/> public static OfflineEditsVisitor GetEditsVisitor(string filename, string processor , bool printToScreen) { if (StringUtils.EqualsIgnoreCase("binary", processor)) { return(new BinaryEditsVisitor(filename)); } OfflineEditsVisitor vis; OutputStream fout = new FileOutputStream(filename); OutputStream @out = null; try { if (!printToScreen) { @out = fout; } else { OutputStream[] outs = new OutputStream[2]; outs[0] = fout; outs[1] = System.Console.Out; @out = new TeeOutputStream(outs); } if (StringUtils.EqualsIgnoreCase("xml", processor)) { vis = new XmlEditsVisitor(@out); } else { if (StringUtils.EqualsIgnoreCase("stats", processor)) { vis = new StatisticsEditsVisitor(@out); } else { throw new IOException("Unknown proccesor " + processor + " (valid processors: xml, binary, stats)" ); } } @out = fout = null; return(vis); } finally { IOUtils.CloseStream(fout); IOUtils.CloseStream(@out); } }