]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rados tool: bulk objects removal
authorYehuda Sadeh <yehuda@inktank.com>
Wed, 11 Jul 2012 18:34:21 +0000 (11:34 -0700)
committerSage Weil <sage@inktank.com>
Thu, 12 Jul 2012 03:06:32 +0000 (20:06 -0700)
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>
src/rados.cc

index e5bdddd0ad0d8ea6a4f30efab6c93773eb0e8465..4c02da5f9d81546c845e17066b170ecf383e8937 100644 (file)
@@ -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) {