]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rados cli: setomapval can now read from stdin
authorJason Dillaman <dillaman@redhat.com>
Wed, 13 May 2015 14:10:02 +0000 (10:10 -0400)
committerJason Dillaman <dillaman@redhat.com>
Wed, 13 May 2015 14:10:02 +0000 (10:10 -0400)
This will allow a user to store binary values within omap.  Since
RBD uses binary omap values, this will assist with certain recovery
operations.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/tools/rados/rados.cc

index 50140659535dbe6e90ab635b27a4b6192eac9edb..ba13efd08543b99d00f30a609dd15c8deefc28d6 100644 (file)
@@ -1773,16 +1773,26 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts,
       ret = 0;
     }
   } else if (strcmp(nargs[0], "setomapval") == 0) {
-    if (!pool_name || nargs.size() < 4)
+    if (!pool_name || nargs.size() < 3 || nargs.size() > 4)
       usage_exit();
 
     string oid(nargs[1]);
     string key(nargs[2]);
-    string val(nargs[3]);
 
-    map<string, bufferlist> values;
     bufferlist bl;
-    bl.append(val);
+    if (nargs.size() == 4) {
+      string val(nargs[3]);
+      bl.append(val);
+    } else {
+      do {
+       ret = bl.read_fd(STDIN_FILENO, 1024); // from stdin
+       if (ret < 0) {
+         goto out;
+        }
+      } while (ret > 0);
+    }
+
+    map<string, bufferlist> values;
     values[key] = bl;
 
     ret = io_ctx.omap_set(oid, values);