return 0;
}
+void myexit(int ret)
+{
+ if (g_ceph_context)
+ g_ceph_context->put();
+ exit(ret);
+}
+
static void invalid_filestore_path(string &path)
{
cerr << "Invalid filestore path specified: " << path << "\n";
- exit(1);
+ myexit(1);
}
int get_log(ObjectStore *fs, __u8 struct_ver,
if (!pgid.is_no_shard()) {
cerr << "Importing Erasure Coded shard is not supported" << std::endl;
- exit(1);
+ myexit(1);
}
if (debug) {
cerr << std::endl;
cerr << "The optional [file] argument will read stdin or write stdout" << std::endl;
cerr << "if not specified or if '-' specified." << std::endl;
- exit(1);
}
bool ends_with(const string& check, const string& ending)
if (vm.count("help")) {
usage(desc);
+ myexit(1);
}
if (!vm.count("debug")) {
if (object == "import-rados") {
if (vm.count("objcmd") == 0) {
cerr << "ceph-objectstore-tool import-rados <pool> [file]" << std::endl;
- exit(1);
+ myexit(1);
}
string pool = objcmd;
if (arg1 == "-") {
if (isatty(STDIN_FILENO)) {
cerr << "stdin is a tty and no file specified" << std::endl;
- exit(1);
+ myexit(1);
}
file_fd = STDIN_FILENO;
} else {
int ret = do_import_rados(pool);
if (ret == 0)
cout << "Import successful" << std::endl;
- return ret != 0;
+ myexit(ret != 0);
}
if (!vm.count("data-path")) {
cerr << "Must provide --data-path" << std::endl;
usage(desc);
+ myexit(1);
}
if (!vm.count("type")) {
type = "filestore";
if (type == "filestore" && !vm.count("journal-path")) {
cerr << "Must provide --journal-path" << std::endl;
usage(desc);
+ myexit(1);
}
if (op != "list" && vm.count("object") && !vm.count("objcmd")) {
cerr << "Invalid syntax, missing command" << std::endl;
usage(desc);
+ myexit(1);
}
if (!vm.count("op") && !(vm.count("object") && vm.count("objcmd"))) {
cerr << "Must provide --op or object command..." << std::endl;
usage(desc);
+ myexit(1);
}
if (op != "list" && vm.count("op") && vm.count("object")) {
cerr << "Can't specify both --op and object command syntax" << std::endl;
usage(desc);
+ myexit(1);
}
outistty = isatty(STDOUT_FILENO);
if (!vm.count("file") || file == "-") {
if (outistty) {
cerr << "stdout is a tty and no --file filename specified" << std::endl;
- exit(1);
+ myexit(1);
}
file_fd = STDOUT_FILENO;
} else {
if (!vm.count("file") || file == "-") {
if (isatty(STDIN_FILENO)) {
cerr << "stdin is a tty and no --file filename specified" << std::endl;
- exit(1);
+ myexit(1);
}
file_fd = STDIN_FILENO;
} else {
struct stat st;
if (::stat(dpath.c_str(), &st) == -1) {
perror("data-path");
- exit(1);
+ myexit(1);
}
//Verify data data-path really is a filestore
if (type == "filestore") {
if (op == "import" && pgidstr.length()) {
cerr << "--pgid option invalid with import" << std::endl;
- return 1;
+ myexit(1);
}
if (pgidstr.length() && !pgid.parse(pgidstr.c_str())) {
cerr << "Invalid pgid '" << pgidstr << "' specified" << std::endl;
- return 1;
+ myexit(1);
}
ObjectStore *fs = ObjectStore::create(g_ceph_context, type, dpath, jpath, flags);
<< "enable_experimental_unrecoverable_data_corrupting_features"
<< std::endl;
}
- exit(1);
+ myexit(1);
}
int r = fs->mount();
} else {
cerr << "Mount failed with '" << cpp_strerror(-r) << "'" << std::endl;
}
- return 1;
+ myexit(1);
}
bool fs_sharded_objects = fs->get_allow_sharded_objects();
(pgidstr.length() == 0)) {
cerr << "Must provide pgid" << std::endl;
usage(desc);
+ ret = 1;
+ goto out;
}
if (op == "set-allow-sharded-objects") {
ret = 1;
goto out;
} else if (objcmd == "get-attr") {
- if (vm.count("arg1") == 0)
+ if (vm.count("arg1") == 0) {
usage(desc);
+ ret = 1;
+ goto out;
+ }
r = do_get_attr(fs, coll, ghobj, arg1);
if (r)
ret = 1;
goto out;
} else if (objcmd == "set-attr") {
- if (vm.count("arg1") == 0)
+ if (vm.count("arg1") == 0) {
usage(desc);
+ ret = 1;
+ }
int fd;
if (vm.count("arg2") == 0 || arg2 == "-") {
ret = 1;
goto out;
} else if (objcmd == "rm-attr") {
- if (vm.count("arg1") == 0)
+ if (vm.count("arg1") == 0) {
usage(desc);
+ ret = 1;
+ goto out;
+ }
r = do_rm_attr(fs, coll, ghobj, arg1);
if (r)
ret = 1;
goto out;
} else if (objcmd == "get-omap") {
- if (vm.count("arg1") == 0)
+ if (vm.count("arg1") == 0) {
usage(desc);
+ ret = 1;
+ goto out;
+ }
r = do_get_omap(fs, coll, ghobj, arg1);
if (r)
ret = 1;
goto out;
} else if (objcmd == "set-omap") {
- if (vm.count("arg1") == 0)
+ if (vm.count("arg1") == 0) {
usage(desc);
-
+ ret = 1;
+ goto out;
+ }
int fd;
if (vm.count("arg2") == 0 || arg2 == "-") {
// Since read_fd() doesn't handle ^D from a tty stdin, don't allow it.
ret = 1;
goto out;
} else if (objcmd == "rm-omap") {
- if (vm.count("arg1") == 0)
+ if (vm.count("arg1") == 0) {
usage(desc);
+ ret = 1;
+ goto out;
+ }
r = do_rm_omap(fs, coll, ghobj, arg1);
if (r)
ret = 1;
goto out;
} else if (objcmd == "get-omaphdr") {
- if (vm.count("arg1"))
+ if (vm.count("arg1")) {
usage(desc);
+ ret = 1;
+ goto out;
+ }
r = do_get_omaphdr(fs, coll, ghobj);
if (r)
ret = 1;
goto out;
} else if (objcmd == "set-omaphdr") {
// Extra arg
- if (vm.count("arg2"))
+ if (vm.count("arg2")) {
usage(desc);
+ ret = 1;
+ goto out;
+ }
int fd;
if (vm.count("arg1") == 0 || arg1 == "-") {
// Since read_fd() doesn't handle ^D from a tty stdin, don't allow it.
}
cerr << "Unknown object command '" << objcmd << "'" << std::endl;
usage(desc);
+ ret = 1;
+ goto out;
}
bufferlist bl;
cerr << "Must provide --op (info, log, remove, export, import, list, list-lost, fix-lost, list-pgs, rm-past-intervals)"
<< std::endl;
usage(desc);
+ ret = 1;
}
} else {
cerr << "PG '" << pgid << "' not found" << std::endl;
out:
if (fs->umount() < 0) {
cerr << "umount failed" << std::endl;
- return 1;
+ if (ret == 0) ret = 1;
}
// Check for -errno accidentally getting here
if (ret < 0)
ret = 1;
- return ret;
+ myexit(ret);
}