/** * Constructor */ public OfflineEditsBinaryLoader(OfflineEditsVisitor visitor, EditLogInputStream inputStream, OfflineEditsViewer.Flags flags) { this.visitor = visitor; this.inputStream = inputStream; this.fixTxIds = flags.getFixTxIds(); this.recoveryMode = flags.getRecoveryMode(); this.nextTxId = -1; }
@Override public void visitOp(FSEditLogOp op) throws IOException { incrementOpCodeCount(op.opCode); }
/** * main() runs the offline edits viewer using ToolRunner * * @param argv Command line parameters. */ public static void main(String[] argv) throws Exception { int res = ToolRunner.run(new OfflineEditsViewer(), argv); System.exit(res); }
Options options = buildOptions(); if(argv.length == 0) { printHelp(); return 0; if (argv.length == 1 && isHelpOption(argv[0])) { printHelp(); return 0; System.out.println( "Error parsing command-line options: " + e.getMessage()); printHelp(); return -1; printHelp(); return -1; processor = defaultProcessor; Flags flags = new Flags(); if (cmd.hasOption("r")) { flags.setRecoveryMode(); flags.setFixTxIds(); flags.setPrintToScreen(); return go(inputFileName, outputFileName, processor, flags, null);
String processor, boolean printToScreen) throws IOException { if(StringUtils.equalsIgnoreCase("binary", processor)) { return new BinaryEditsVisitor(filename); outs[0] = fout; outs[1] = System.out; out = new TeeOutputStream(outs); vis = new XmlEditsVisitor(out); } else if(StringUtils.equalsIgnoreCase("stats", processor)) { vis = new StatisticsEditsVisitor(out); } else { throw new IOException("Unknown proccesor " + processor +
Flags flags, OfflineEditsVisitor visitor) if (flags.getPrintToScreen()) { System.out.println("input [" + inputFileName + "]"); System.out.println("output [" + outputFileName + "]"); visitor = OfflineEditsVisitorFactory.getEditsVisitor( outputFileName, processor, flags.getPrintToScreen()); createLoader(visitor, inputFileName, xmlInput, flags); loader.loadEdits(); } catch(Exception e) { System.err.println("Encountered exception. Exiting: " + e.getMessage());
public void loadEdits() throws IOException { try { visitor.start(inputStream.getVersion(true)); while (true) { try { nextTxId++; visitor.visitOp(op); } catch (IOException e) { if (!recoveryMode) { visitor.close(e); throw e; visitor.close(e); throw e; visitor.close(null); } finally { IOUtils.cleanupWithLogger(LOG, inputStream);
static OfflineEditsLoader createLoader(OfflineEditsVisitor visitor, String inputFileName, boolean xmlInput, OfflineEditsViewer.Flags flags) throws IOException { if (xmlInput) { return new OfflineEditsXmlLoader(visitor, new File(inputFileName), flags); } else { File file = null; EditLogInputStream elis = null; OfflineEditsLoader loader = null; try { file = new File(inputFileName); elis = new EditLogFileInputStream(file, HdfsServerConstants.INVALID_TXID, HdfsServerConstants.INVALID_TXID, false); loader = new OfflineEditsBinaryLoader(visitor, elis, flags); } finally { if ((loader == null) && (elis != null)) { elis.close(); } } return loader; } } }
/** Close the visitor */ @Override public void close(Throwable error) throws IOException { out.print(getStatisticsString()); if (error != null) { out.print("EXITING ON ERROR: " + error.toString() + "\n"); } out.close(); }
public OfflineEditsXmlLoader(OfflineEditsVisitor visitor, File inputFile, OfflineEditsViewer.Flags flags) throws FileNotFoundException { this.visitor = visitor; this.fileReader = new InputStreamReader(new FileInputStream(inputFile), Charsets.UTF_8); this.fixTxIds = flags.getFixTxIds(); }
/** * Start visitor (initialization) */ @Override public void start(int version) throws IOException { try { contentHandler.startElement("", "", "EDITS_VERSION", new AttributesImpl()); StringBuilder bld = new StringBuilder(); bld.append(version); addString(bld.toString()); contentHandler.endElement("", "", "EDITS_VERSION"); } catch (SAXException e) { throw new IOException("SAX error: " + e.getMessage()); } }
/** * Loads edits file, uses visitor to process all elements */ @Override public void loadEdits() throws IOException { try { XMLReader xr = XMLReaderFactory.createXMLReader(); xr.setContentHandler(this); xr.setErrorHandler(this); xr.setDTDHandler(null); xr.parse(new InputSource(fileReader)); visitor.close(null); } catch (SAXParseException e) { System.out.println("XML parsing error: " + "\n" + "Line: " + e.getLineNumber() + "\n" + "URI: " + e.getSystemId() + "\n" + "Message: " + e.getMessage()); visitor.close(e); throw new IOException(e.toString()); } catch (SAXException e) { visitor.close(e); throw new IOException(e.toString()); } catch (RuntimeException e) { visitor.close(e); throw e; } finally { fileReader.close(); } }
/** * Convenience shortcut method to parse a specific token type */ public ShortToken visitShort(EditsElement e) throws IOException { return (ShortToken)visit(tokenizer.read(new ShortToken(e))); }
/** * Convenience shortcut method to parse a specific token type */ public StringUTF8Token visitStringUTF8(EditsElement e) throws IOException { return (StringUTF8Token)visit(tokenizer.read(new StringUTF8Token(e))); }
/** * Convenience shortcut method to parse a specific token type */ public VLongToken visitVLong(EditsElement e) throws IOException { return (VLongToken)visit(tokenizer.read(new VLongToken(e))); }
/** * Convenience shortcut method to parse a specific token type */ public StringTextToken visitStringText(EditsElement e) throws IOException { return (StringTextToken)visit(tokenizer.read(new StringTextToken(e))); }