"OBJECT COMMANDS\n"
" get <obj-name> [outfile] fetch object\n"
" put <obj-name> [infile] [--offset offset]\n"
-" write object write object start offset(default:0)\n"
+" write object with start offset (default:0)\n"
" append <obj-name> [infile] append object\n"
" truncate <obj-name> length truncate object\n"
" create <obj-name> create object\n"
tab.define_column("COPIES", TextTable::LEFT, TextTable::RIGHT);
tab.define_column("MISSING_ON_PRIMARY", TextTable::LEFT, TextTable::RIGHT);
tab.define_column("UNFOUND", TextTable::LEFT, TextTable::RIGHT);
- tab.define_column("DEGRAED", TextTable::LEFT, TextTable::RIGHT);
+ tab.define_column("DEGRADED", TextTable::LEFT, TextTable::RIGHT);
tab.define_column("RD_OPS", TextTable::LEFT, TextTable::RIGHT);
tab.define_column("RD", TextTable::LEFT, TextTable::RIGHT);
tab.define_column("WR_OPS", TextTable::LEFT, TextTable::RIGHT);
<< cpp_strerror(ret) << std::endl;
goto out;
}
+ } else if (strcmp(nargs[0], "set-redirect") == 0) {
+ if (!pool_name)
+ usage_exit();
+
+ const char *target = target_pool_name;
+ if (!target)
+ target = pool_name;
+
+ const char *target_obj;
+ if (nargs.size() < 3) {
+ if (strcmp(target, pool_name) == 0) {
+ cerr << "cannot copy object into itself" << std::endl;
+ ret = -1;
+ goto out;
+ }
+ target_obj = nargs[1];
+ } else {
+ target_obj = nargs[2];
+ }
+
+ IoCtx target_ctx;
+ ret = rados.ioctx_create(target, target_ctx);
+ if (target_oloc.size()) {
+ target_ctx.locator_set_key(target_oloc);
+ }
+ if (target_nspace.size()) {
+ target_ctx.set_namespace(target_nspace);
+ }
+
+ ObjectWriteOperation op;
+ op.set_redirect(target_obj, target_ctx, 0);
+ ret = io_ctx.operate(nargs[1], &op);
+ if (ret < 0) {
+ cerr << "error set-redirect " << pool_name << "/" << nargs[1] << " => " << target << "/" << target_obj << ": " << cpp_strerror(ret) << std::endl;
+ goto out;
+ }
} else if (strcmp(nargs[0], "export") == 0) {
// export [filename]
if (!pool_name || nargs.size() > 2) {