mirror of https://github.com/facebook/rocksdb.git
Add --version and --help to ldb and sst_dump (#6951)
Summary: as title Pull Request resolved: https://github.com/facebook/rocksdb/pull/6951 Test Plan: tests included + manual Reviewed By: ajkr Differential Revision: D21918540 Pulled By: pdillinger fbshipit-source-id: 79d4991f2a831214fc7e477a839ec19dbbace6c5
This commit is contained in:
parent
6a8ddd374d
commit
edf74d1cb1
|
@ -11,7 +11,7 @@ namespace ROCKSDB_NAMESPACE {
|
||||||
|
|
||||||
class SSTDumpTool {
|
class SSTDumpTool {
|
||||||
public:
|
public:
|
||||||
int Run(int argc, char** argv, Options options = Options());
|
int Run(int argc, char const* const* argv, Options options = Options());
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ROCKSDB_NAMESPACE
|
} // namespace ROCKSDB_NAMESPACE
|
||||||
|
|
|
@ -78,7 +78,7 @@ class LDBCommand {
|
||||||
SelectCommand);
|
SelectCommand);
|
||||||
|
|
||||||
static LDBCommand* InitFromCmdLineArgs(
|
static LDBCommand* InitFromCmdLineArgs(
|
||||||
int argc, char** argv, const Options& options,
|
int argc, char const* const* argv, const Options& options,
|
||||||
const LDBOptions& ldb_options,
|
const LDBOptions& ldb_options,
|
||||||
const std::vector<ColumnFamilyDescriptor>* column_families);
|
const std::vector<ColumnFamilyDescriptor>* column_families);
|
||||||
|
|
||||||
|
@ -269,11 +269,13 @@ class LDBCommand {
|
||||||
|
|
||||||
class LDBCommandRunner {
|
class LDBCommandRunner {
|
||||||
public:
|
public:
|
||||||
static void PrintHelp(const LDBOptions& ldb_options, const char* exec_name);
|
static void PrintHelp(const LDBOptions& ldb_options, const char* exec_name,
|
||||||
|
bool to_stderr = true);
|
||||||
|
|
||||||
// Returns the status code to return. 0 is no error.
|
// Returns the status code to return. 0 is no error.
|
||||||
static int RunCommand(
|
static int RunCommand(
|
||||||
int argc, char** argv, Options options, const LDBOptions& ldb_options,
|
int argc, char const* const* argv, Options options,
|
||||||
|
const LDBOptions& ldb_options,
|
||||||
const std::vector<ColumnFamilyDescriptor>* column_families);
|
const std::vector<ColumnFamilyDescriptor>* column_families);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ void DumpSstFile(Options options, std::string filename, bool output_hex,
|
||||||
};
|
};
|
||||||
|
|
||||||
LDBCommand* LDBCommand::InitFromCmdLineArgs(
|
LDBCommand* LDBCommand::InitFromCmdLineArgs(
|
||||||
int argc, char** argv, const Options& options,
|
int argc, char const* const* argv, const Options& options,
|
||||||
const LDBOptions& ldb_options,
|
const LDBOptions& ldb_options,
|
||||||
const std::vector<ColumnFamilyDescriptor>* column_families) {
|
const std::vector<ColumnFamilyDescriptor>* column_families) {
|
||||||
std::vector<std::string> args;
|
std::vector<std::string> args;
|
||||||
|
|
|
@ -41,6 +41,18 @@ class LdbCmdTest : public testing::Test {
|
||||||
std::shared_ptr<Env> env_guard_;
|
std::shared_ptr<Env> env_guard_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TEST_F(LdbCmdTest, HelpAndVersion) {
|
||||||
|
Options o;
|
||||||
|
o.env = TryLoadCustomOrDefaultEnv();
|
||||||
|
LDBOptions lo;
|
||||||
|
static const char* help[] = {"./ldb", "--help"};
|
||||||
|
ASSERT_EQ(0, LDBCommandRunner::RunCommand(2, help, o, lo, nullptr));
|
||||||
|
static const char* version[] = {"./ldb", "--version"};
|
||||||
|
ASSERT_EQ(0, LDBCommandRunner::RunCommand(2, version, o, lo, nullptr));
|
||||||
|
static const char* bad[] = {"./ldb", "--not_an_option"};
|
||||||
|
ASSERT_NE(0, LDBCommandRunner::RunCommand(2, bad, o, lo, nullptr));
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(LdbCmdTest, HexToString) {
|
TEST_F(LdbCmdTest, HexToString) {
|
||||||
// map input to expected outputs.
|
// map input to expected outputs.
|
||||||
// odd number of "hex" half bytes doesn't make sense
|
// odd number of "hex" half bytes doesn't make sense
|
||||||
|
|
|
@ -13,7 +13,7 @@ namespace ROCKSDB_NAMESPACE {
|
||||||
LDBOptions::LDBOptions() {}
|
LDBOptions::LDBOptions() {}
|
||||||
|
|
||||||
void LDBCommandRunner::PrintHelp(const LDBOptions& ldb_options,
|
void LDBCommandRunner::PrintHelp(const LDBOptions& ldb_options,
|
||||||
const char* /*exec_name*/) {
|
const char* /*exec_name*/, bool to_stderr) {
|
||||||
std::string ret;
|
std::string ret;
|
||||||
|
|
||||||
ret.append(ldb_options.print_help_header);
|
ret.append(ldb_options.print_help_header);
|
||||||
|
@ -99,22 +99,32 @@ void LDBCommandRunner::PrintHelp(const LDBOptions& ldb_options,
|
||||||
WriteExternalSstFilesCommand::Help(ret);
|
WriteExternalSstFilesCommand::Help(ret);
|
||||||
IngestExternalSstFilesCommand::Help(ret);
|
IngestExternalSstFilesCommand::Help(ret);
|
||||||
|
|
||||||
fprintf(stderr, "%s\n", ret.c_str());
|
fprintf(to_stderr ? stderr : stdout, "%s\n", ret.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
int LDBCommandRunner::RunCommand(
|
int LDBCommandRunner::RunCommand(
|
||||||
int argc, char** argv, Options options, const LDBOptions& ldb_options,
|
int argc, char const* const* argv, Options options,
|
||||||
|
const LDBOptions& ldb_options,
|
||||||
const std::vector<ColumnFamilyDescriptor>* column_families) {
|
const std::vector<ColumnFamilyDescriptor>* column_families) {
|
||||||
if (argc <= 2) {
|
if (argc <= 2) {
|
||||||
PrintHelp(ldb_options, argv[0]);
|
if (std::string(argv[1]) == "--version") {
|
||||||
|
printf("ldb from RocksDB %d.%d.%d\n", ROCKSDB_MAJOR, ROCKSDB_MINOR,
|
||||||
|
ROCKSDB_PATCH);
|
||||||
|
return 0;
|
||||||
|
} else if (std::string(argv[1]) == "--help") {
|
||||||
|
PrintHelp(ldb_options, argv[0], /*to_stderr*/ false);
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
PrintHelp(ldb_options, argv[0], /*to_stderr*/ true);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LDBCommand* cmdObj = LDBCommand::InitFromCmdLineArgs(
|
LDBCommand* cmdObj = LDBCommand::InitFromCmdLineArgs(
|
||||||
argc, argv, options, ldb_options, column_families);
|
argc, argv, options, ldb_options, column_families);
|
||||||
if (cmdObj == nullptr) {
|
if (cmdObj == nullptr) {
|
||||||
fprintf(stderr, "Unknown command\n");
|
fprintf(stderr, "Unknown command\n");
|
||||||
PrintHelp(ldb_options, argv[0]);
|
PrintHelp(ldb_options, argv[0], /*to_stderr*/ true);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -129,6 +129,20 @@ class SSTDumpToolTest : public testing::Test {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TEST_F(SSTDumpToolTest, HelpAndVersion) {
|
||||||
|
Options opts;
|
||||||
|
opts.env = env();
|
||||||
|
|
||||||
|
ROCKSDB_NAMESPACE::SSTDumpTool tool;
|
||||||
|
|
||||||
|
static const char* help[] = {"./sst_dump", "--help"};
|
||||||
|
ASSERT_TRUE(!tool.Run(2, help, opts));
|
||||||
|
static const char* version[] = {"./sst_dump", "--version"};
|
||||||
|
ASSERT_TRUE(!tool.Run(2, version, opts));
|
||||||
|
static const char* bad[] = {"./sst_dump", "--not_an_option"};
|
||||||
|
ASSERT_TRUE(tool.Run(2, bad, opts));
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(SSTDumpToolTest, EmptyFilter) {
|
TEST_F(SSTDumpToolTest, EmptyFilter) {
|
||||||
Options opts;
|
Options opts;
|
||||||
opts.env = env();
|
opts.env = env();
|
||||||
|
|
|
@ -481,9 +481,9 @@ Status SstFileDumper::ReadTableProperties(
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
void print_help() {
|
void print_help(bool to_stderr) {
|
||||||
fprintf(
|
fprintf(
|
||||||
stderr,
|
to_stderr ? stderr : stdout,
|
||||||
R"(sst_dump --file=<data_dir_OR_sst_file> [--command=check|scan|raw|recompress|identify]
|
R"(sst_dump --file=<data_dir_OR_sst_file> [--command=check|scan|raw|recompress|identify]
|
||||||
--file=<data_dir_OR_sst_file>
|
--file=<data_dir_OR_sst_file>
|
||||||
Path to SST file or directory containing SST files
|
Path to SST file or directory containing SST files
|
||||||
|
@ -572,7 +572,7 @@ bool ParseIntArg(const char* arg, const std::string arg_name,
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
int SSTDumpTool::Run(int argc, char** argv, Options options) {
|
int SSTDumpTool::Run(int argc, char const* const* argv, Options options) {
|
||||||
const char* env_uri = nullptr;
|
const char* env_uri = nullptr;
|
||||||
const char* dir_or_file = nullptr;
|
const char* dir_or_file = nullptr;
|
||||||
uint64_t read_num = std::numeric_limits<uint64_t>::max();
|
uint64_t read_num = std::numeric_limits<uint64_t>::max();
|
||||||
|
@ -696,10 +696,17 @@ int SSTDumpTool::Run(int argc, char** argv, Options options) {
|
||||||
"compression_level_to must be numeric", &tmp_val)) {
|
"compression_level_to must be numeric", &tmp_val)) {
|
||||||
has_compression_level_to = true;
|
has_compression_level_to = true;
|
||||||
compress_level_to = static_cast<int>(tmp_val);
|
compress_level_to = static_cast<int>(tmp_val);
|
||||||
|
} else if (strcmp(argv[i], "--help") == 0) {
|
||||||
|
print_help(/*to_stderr*/ false);
|
||||||
|
return 0;
|
||||||
|
} else if (strcmp(argv[i], "--version") == 0) {
|
||||||
|
printf("sst_dump from RocksDB %d.%d.%d\n", ROCKSDB_MAJOR, ROCKSDB_MINOR,
|
||||||
|
ROCKSDB_PATCH);
|
||||||
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Unrecognized argument '%s'\n\n", argv[i]);
|
fprintf(stderr, "Unrecognized argument '%s'\n\n", argv[i]);
|
||||||
print_help();
|
print_help(/*to_stderr*/ true);
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -730,7 +737,7 @@ int SSTDumpTool::Run(int argc, char** argv, Options options) {
|
||||||
|
|
||||||
if (dir_or_file == nullptr) {
|
if (dir_or_file == nullptr) {
|
||||||
fprintf(stderr, "file or directory must be specified.\n\n");
|
fprintf(stderr, "file or directory must be specified.\n\n");
|
||||||
print_help();
|
print_help(/*to_stderr*/ true);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue