/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002-2006 * Sleepycat Software. All rights reserved. * * $Id: DbPrintLog.java,v 1.1 2006/05/06 09:00:38 ckaestne Exp $ */ package com.sleepycat.je.util; import java.io.File; import java.io.IOException; import com.sleepycat.je.DatabaseException; import com.sleepycat.je.config.EnvironmentParams; import com.sleepycat.je.dbi.EnvironmentImpl; import com.sleepycat.je.log.DumpFileReader; import com.sleepycat.je.log.FileManager; import com.sleepycat.je.log.PrintFileReader; import com.sleepycat.je.log.StatsFileReader; import com.sleepycat.je.tree.Key; import com.sleepycat.je.utilint.CmdUtil; import com.sleepycat.je.utilint.DbLsn; /** * DbPrintLog is a debugging utility that dumps JE log files into a human * readable form. */ public class DbPrintLog { /** * Dump a JE log into human readable form. */ private void dump(File envHome, String entryTypes, String txnIds, long startLsn, long endLsn, boolean verbose, boolean stats) throws IOException, DatabaseException { EnvironmentImpl env = CmdUtil.makeUtilityEnvironment(envHome, true); FileManager fileManager = env.getFileManager(); fileManager.setIncludeDeletedFiles(true); int readBufferSize = env.getConfigManager().getInt (EnvironmentParams.LOG_ITERATOR_READ_SIZE); // Make a reader. DumpFileReader reader = null; if (stats) { reader = new StatsFileReader(env, readBufferSize, startLsn, endLsn, entryTypes, txnIds, verbose); } else { reader = new PrintFileReader(env, readBufferSize, startLsn, endLsn, entryTypes, txnIds, verbose); } // Enclose the output in a tag to keep proper XML syntax. System.out.println("<DbPrintLog>"); while (reader.readNextEntry()) { } reader.summarize(); System.out.println("</DbPrintLog>"); env.close(); } /** * Main */ public static void main(String [] argv) { try { int whichArg = 0; String entryTypes = null; String txnIds = null; long startLsn = DbLsn.NULL_LSN; long endLsn = DbLsn.NULL_LSN; boolean verbose = true; boolean stats = false; // default to looking in current directory File envHome = new File("."); Key.DUMP_BINARY = true; while (whichArg < argv.length) { String nextArg = argv[whichArg]; if (nextArg.equals("-h")) { whichArg++; envHome = new File(CmdUtil.getArg(argv, whichArg)); } else if (nextArg.equals("-ty")) { whichArg++; entryTypes = CmdUtil.getArg(argv, whichArg); } else if (nextArg.equals("-tx")) { whichArg++; txnIds = CmdUtil.getArg(argv, whichArg); } else if (nextArg.equals("-s")) { whichArg++; long startFileNum = CmdUtil.readLongNumber(CmdUtil.getArg(argv, whichArg)); startLsn = DbLsn.makeLsn(startFileNum, 0); } else if (nextArg.equals("-e")) { whichArg++; long endFileNum = CmdUtil.readLongNumber(CmdUtil.getArg(argv, whichArg)); endLsn = DbLsn.makeLsn(endFileNum, 0); } else if (nextArg.equals("-k")) { whichArg++; String dumpType = CmdUtil.getArg(argv, whichArg); if (dumpType.equalsIgnoreCase("text")) { Key.DUMP_BINARY = false; } } else if (nextArg.equals("-q")) { whichArg++; verbose = false; } else if (nextArg.equals("-S")) { whichArg++; stats = true; } else { System.err.println (nextArg + " is not a supported option."); usage(); System.exit(-1); } whichArg++; } DbPrintLog printer = new DbPrintLog(); printer.dump(envHome, entryTypes, txnIds, startLsn, endLsn, verbose, stats); } catch (Throwable e) { e.printStackTrace(); System.out.println(e.getMessage()); usage(); System.exit(1); } } private static void usage() { System.out.println("Usage: " + CmdUtil.getJavaCommand(DbPrintLog.class)); System.out.println(" -h <envHomeDir>"); System.out.println(" -e <end file number, in hex>"); System.out.println(" -k <binary|text> (format for dumping the key)"); System.out.println(" -s <start file number, in hex>"); System.out.println(" -tx <targetted txn ids, comma separated>"); System.out.println(" -ty <targetted entry types, comma separated>"); System.out.println(" -S show Summary of log entries"); System.out.println(" -q if specified, concise version is printed"); System.out.println(" Default is verbose version.)"); System.out.println("All arguments are optional"); } }