From: Jason Dillaman Date: Wed, 13 May 2015 14:10:02 +0000 (-0400) Subject: rados cli: setomapval can now read from stdin X-Git-Tag: v9.0.2~167^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7dea175741a435b82e9c7b1eb8dd429519ebce3a;p=ceph.git rados cli: setomapval can now read from stdin 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 --- diff --git a/src/tools/rados/rados.cc b/src/tools/rados/rados.cc index 50140659535d..ba13efd08543 100644 --- a/src/tools/rados/rados.cc +++ b/src/tools/rados/rados.cc @@ -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 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 values; values[key] = bl; ret = io_ctx.omap_set(oid, values);