From: Ilya Dryomov Date: Fri, 7 Mar 2014 15:58:55 +0000 (+0200) Subject: rados: add set-alloc-hint command X-Git-Tag: v0.78~44^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f581bda5cfcff835c24259285344d7e7ee4a673e;p=ceph.git rados: add set-alloc-hint command Set allocation hint for an object. Signed-off-by: Ilya Dryomov --- diff --git a/src/tools/rados/rados.cc b/src/tools/rados/rados.cc index 66a79191d231..8f7fb7653f8d 100644 --- a/src/tools/rados/rados.cc +++ b/src/tools/rados/rados.cc @@ -101,6 +101,8 @@ void usage(ostream& out) " setomapheader \n" " tmap-to-omap convert tmap keys/values to omap\n" " listwatchers list the watchers of this object\n" +" set-alloc-hint \n" +" set allocation hint for an object\n" "\n" "IMPORT AND EXPORT\n" " import [options] \n" @@ -2197,6 +2199,27 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts, ret = io_ctx.notify(oid, 0, bl); if (ret != 0) cerr << "error calling notify: " << ret << std::endl; + } else if (strcmp(nargs[0], "set-alloc-hint") == 0) { + if (!pool_name || nargs.size() < 4) + usage_exit(); + string err; + string oid(nargs[1]); + uint64_t expected_object_size = strict_strtoll(nargs[2], 10, &err); + if (!err.empty()) { + cerr << "couldn't parse expected_object_size: " << err << std::endl; + usage_exit(); + } + uint64_t expected_write_size = strict_strtoll(nargs[3], 10, &err); + if (!err.empty()) { + cerr << "couldn't parse expected_write_size: " << err << std::endl; + usage_exit(); + } + ret = io_ctx.set_alloc_hint(oid, expected_object_size, expected_write_size); + if (ret < 0) { + cerr << "error setting alloc-hint " << pool_name << "/" << oid << ": " + << strerror_r(-ret, buf, sizeof(buf)) << std::endl; + goto out; + } } else if (strcmp(nargs[0], "load-gen") == 0) { if (!pool_name) { cerr << "error: must specify pool" << std::endl;