/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002-2006
* Sleepycat Software. All rights reserved.
*
* $Id: DbRecover.java,v 1.1 2006/05/06 09:00:38 ckaestne Exp $
*/
package com.sleepycat.je.util;
import java.io.File;
import com.sleepycat.je.dbi.EnvironmentImpl;
import com.sleepycat.je.utilint.CmdUtil;
/**
* DbRecover is a utility that allows the user to resume use of the environment
* from a given time point. Not for general use yet!
*/
public class DbRecover {
public static void main(String [] argv) {
try {
int whichArg = 0;
boolean seenFile = false;
boolean seenOffset = false;
long truncateFileNum = -1;
long truncateOffset = -1;
/*
* Usage: -h <envHomeDir>
-f <file number, in hex>
* -o <offset, in hex. The log is truncated at the position
* including this offset>
*/
File envHome = new File("."); // default to current directory
while (whichArg < argv.length) {
String nextArg = argv[whichArg];
if (nextArg.equals("-h")) {
whichArg++;
envHome = new File(CmdUtil.getArg(argv, whichArg));
} else if (nextArg.equals("-f")) {
whichArg++;
truncateFileNum =
CmdUtil.readLongNumber(CmdUtil.getArg(argv, whichArg));
seenFile = true;
} else if (nextArg.equals("-o")) {
whichArg++;
truncateOffset =
CmdUtil.readLongNumber(CmdUtil.getArg(argv, whichArg));
seenOffset = true;
} else {
throw new IllegalArgumentException
(nextArg + " is not a supported option.");
}
whichArg++;
}
if ((!seenFile) || (!seenOffset)) {
usage();
System.exit(1);
}
/* Make a read/write environment */
EnvironmentImpl env =
CmdUtil.makeUtilityEnvironment(envHome, false);
/* Go through the file manager to get the JE file. Truncate. */
env.getFileManager().truncateLog(truncateFileNum, truncateOffset);
env.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
usage();
System.exit(1);
}
}
private static void usage() {
System.out.println("Usage: " +
CmdUtil.getJavaCommand(DbRecover.class));
System.out.println(" -h <environment home>");
System.out.println("(optional)");
System.out.println(" -f <file number, in hex>");
System.out.println(" -o <offset, in hex>");
System.out.println("Log file is truncated at position starting at" +
" and inclusive of the offset. Beware, not " +
" for general purpose use yet!");
}
}