blob: ef425d21c9fee3bba5f9215c6b39f45c7e6e9554 [file] [log] [blame]
/*-
* Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
*
* This file was distributed by Oracle as part of a version of Oracle Berkeley
* DB Java Edition made available at:
*
* http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
*
* Please see the LICENSE file included in the top-level directory of the
* appropriate version of Oracle Berkeley DB Java Edition for a copy of the
* license and additional information.
*/
package com.sleepycat.je.rep.utilint;
import java.io.File;
import java.io.PrintStream;
import java.util.LinkedList;
import java.util.List;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DbInternal;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.rep.impl.RepGroupDB;
import com.sleepycat.je.rep.impl.RepGroupImpl;
/**
* @hidden Dumps the contents of the replication group database. Reads the
* database directly, using a read only Environment.
*
* For internal use only. JE users should now use
* com.sleepycat.je.rep.DbGroupAdmin to display group information.
*
* <pre>
* DbDumpGroup -h &lt;envHome&gt;
* </pre>
*/
public class DbDumpGroup {
private final PrintStream out;
private File envHome = null;
private boolean dumpCount = false;
private DbDumpGroup(PrintStream out) {
this.out = out;
}
public static void main(String[] args) throws Exception {
DbDumpGroup dumper = new DbDumpGroup(System.out);
dumper.parseArgs(args);
try {
dumper.run();
} catch (Throwable e) {
e.printStackTrace(System.err);
System.exit(1);
}
}
public void run() {
out.println("For internal use only. Consider using the public " +
"utility com.sleepycat.je.rep.DbGroupAdmin when " +
"displaying group information.");
out.println("Environment: " + envHome);
if (dumpCount) {
dumpCount();
}
dumpGroup();
}
/**
* Dumps the data item count of each database in the specified environment.
*/
private void dumpCount() {
/*
* Initialize an environment configuration, and create an environment.
*/
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setReadOnly(true);
envConfig.setAllowCreate(false);
Environment env = new Environment(envHome, envConfig);
List<String> databaseNames = new LinkedList<String>();
databaseNames.addAll(env.getDatabaseNames());
for (String dbName : databaseNames) {
DatabaseConfig dbCfg = new DatabaseConfig();
dbCfg.setAllowCreate(false);
dbCfg.setReadOnly(true);
DbInternal.setUseExistingConfig(dbCfg, true);
Database db = env.openDatabase(null, dbName, dbCfg);
out.println("Database: " + dbName + ", Count: " + db.count());
db.close();
}
env.close();
}
/**
* Dumps the contents of the replication group database.
*/
private void dumpGroup() {
RepGroupImpl group = RepGroupDB.getGroup(envHome);
out.println(group);
}
/**
* Parse the command line parameters.
*
* @param argv Input command line parameters.
*/
public void parseArgs(String argv[]) {
int argc = 0;
int nArgs = argv.length;
if (nArgs == 0) {
printUsage(null);
System.exit(0);
}
while (argc < nArgs) {
String thisArg = argv[argc++];
if (thisArg.equals("-h")) {
if (argc < nArgs) {
envHome = new File(argv[argc++]);
} else {
printUsage("-h requires an argument");
}
} else if (thisArg.equals("-dumpCount")) {
dumpCount = true;
} else {
printUsage(thisArg + " is not a valid argument");
}
}
if (envHome == null) {
printUsage("-h is a required argument");
}
}
/**
* Print the usage of this utility.
*
* @param message
*/
private void printUsage(String msg) {
if (msg != null) {
out.println(msg);
}
out.println("Usage: " + DbDumpGroup.class.getName());
out.println(" -h <dir> # environment home directory");
out.println(" -dumpCount # dump all databases' count in\n" +
" this Environment");
System.exit(-1);
}
}