From: Yehuda Sadeh Date: Thu, 21 Oct 2010 21:41:05 +0000 (-0700) Subject: rados: add getxattr, setxattr X-Git-Tag: v0.23~122 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=515efd5a2fa5ce46f0e924d8f5bd5b25c4d69e7e;p=ceph.git rados: add getxattr, setxattr --- diff --git a/src/rados.cc b/src/rados.cc index b480677b49f0..c9052637301b 100644 --- a/src/rados.cc +++ b/src/rados.cc @@ -32,7 +32,7 @@ using namespace librados; void usage() { - cerr << "usage: radostool [options] [commands]" << std::endl; + cerr << "usage: rados [options] [commands]" << std::endl; /* cerr << "If no commands are specified, enter interactive mode.\n"; cerr << "Commands:" << std::endl; cerr << " stop -- cleanly shut down file system" << std::endl @@ -47,6 +47,8 @@ void usage() cerr << " get objname [outfile] -- fetch object\n"; cerr << " put objname [infile] -- write object\n"; cerr << " rm objname -- remove object\n"; + cerr << " getxattr objame attr\n"; + cerr << " setxattr objame attr val\n"; cerr << " ls -- list objects in pool\n\n"; cerr << " chown 123 -- change the pool owner to auid 123\n"; @@ -288,6 +290,39 @@ int main(int argc, const char **argv) goto out; } } + else if (strcmp(nargs[0], "setxattr") == 0) { + if (!pool || nargs.size() < 4) + usage(); + + string oid(nargs[1]); + string attr_name(nargs[2]); + string attr_val(nargs[3]); + + bufferlist bl; + bl.append(attr_val.c_str(), attr_val.length()); + + ret = rados.setxattr(p, oid, attr_name.c_str(), bl); + if (ret < 0) { + cerr << "error setting xattr " << pool << "/" << oid << "/" << attr_name << ": " << strerror_r(-ret, buf, sizeof(buf)) << std::endl; + goto out; + } + } + else if (strcmp(nargs[0], "getxattr") == 0) { + if (!pool || nargs.size() < 3) + usage(); + + string oid(nargs[1]); + string attr_name(nargs[2]); + + bufferlist bl; + ret = rados.getxattr(p, oid, attr_name.c_str(), bl); + if (ret < 0) { + cerr << "error setting xattr " << pool << "/" << oid << "/" << attr_name << ": " << strerror_r(-ret, buf, sizeof(buf)) << std::endl; + goto out; + } + string s(bl.c_str(), bl.length()); + cout << s << std::endl; + } else if (strcmp(nargs[0], "rm") == 0) { if (!pool || nargs.size() < 2) usage();