summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2012-07-11 11:34:21 -0700
committerSage Weil <sage@inktank.com>2012-07-11 20:06:32 -0700
commitcc8df29e19a1fc441ad903aeeb59f7d3e15a5e7c (patch)
tree01bcb242152067c064bf1bacc4485e51d6e887bf
parent762a5b63833b3df4f958bfd3e66acaa6d1ba6c95 (diff)
downloadceph-cc8df29e19a1fc441ad903aeeb59f7d3e15a5e7c.tar.gz
rados tool: bulk objects removal
Issue #2776. Allow the removal of multiple objects in a single rados tool command: # rados -p pool rm obj1 [obj2 [...]] Signed-off-by: Yehuda Sadeh <yehuda@inktank.com> Reviewed-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/rados.cc16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/rados.cc b/src/rados.cc
index e5bdddd0ad0..4c02da5f9d8 100644
--- a/src/rados.cc
+++ b/src/rados.cc
@@ -68,7 +68,7 @@ void usage(ostream& out)
" get <obj-name> [outfile] fetch object\n"
" put <obj-name> [infile] write object\n"
" create <obj-name> [category] create object\n"
-" rm <obj-name> remove object\n"
+" rm <obj-name> ... remove object(s)\n"
" cp <obj-name> [target-obj] copy object\n"
" listxattr <obj-name>\n"
" getxattr <obj-name> attr\n"
@@ -1423,11 +1423,15 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts,
else if (strcmp(nargs[0], "rm") == 0) {
if (!pool_name || nargs.size() < 2)
usage_exit();
- string oid(nargs[1]);
- ret = io_ctx.remove(oid);
- if (ret < 0) {
- cerr << "error removing " << pool_name << "/" << oid << ": " << strerror_r(-ret, buf, sizeof(buf)) << std::endl;
- return 1;
+ vector<const char *>::iterator iter = nargs.begin();
+ ++iter;
+ for (; iter != nargs.end(); ++iter) {
+ const string & oid = *iter;
+ ret = io_ctx.remove(oid);
+ if (ret < 0) {
+ cerr << "error removing " << pool_name << "/" << oid << ": " << strerror_r(-ret, buf, sizeof(buf)) << std::endl;
+ return 1;
+ }
}
}
else if (strcmp(nargs[0], "create") == 0) {