From e9160cfbcdd2ad02c8d72aaaf52e6069e7751806 Mon Sep 17 00:00:00 2001 From: Yao Zongyou Date: Tue, 14 Nov 2017 17:34:03 +0800 Subject: [PATCH] tools/rados: add touch command to change object modification time Signed-off-by: Yao Zongyou --- src/tools/rados/rados.cc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/tools/rados/rados.cc b/src/tools/rados/rados.cc index eb2dd24b57a..0709d923a4f 100644 --- a/src/tools/rados/rados.cc +++ b/src/tools/rados/rados.cc @@ -96,6 +96,7 @@ void usage(ostream& out) " rmxattr attr\n" " stat stat the named object\n" " stat2 stat2 the named object (with high precision time)\n" +" touch [timestamp] change the named object modification time\n" " mapext \n" " rollback roll back object to snap \n" "\n" @@ -2269,6 +2270,31 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts, cout << pool_name << "/" << oid << " mtime " << t << ", size " << size << std::endl; } + } + else if (strcmp(nargs[0], "touch") == 0) { + if (!pool_name || nargs.size() < 2) + usage_exit(); + string oid(nargs[1]); + time_t timestamp = time(NULL); + if (nargs.size() > 2) { + char* endptr = NULL; + timestamp = static_cast(strtoll(nargs[2], &endptr, 10)); + if (*endptr) { + cerr << "Invalid value for timestamp: '" << nargs[2] << "'" << std::endl; + ret = -EINVAL; + goto out; + } + } + + ObjectWriteOperation op; + op.create(false); + op.mtime(×tamp); + ret = io_ctx.operate(oid, &op); + if (ret < 0) { + cerr << " error touch-ing " << pool_name << "/" << oid << ": " + << cpp_strerror(ret) << std::endl; + goto out; + } } else if (strcmp(nargs[0], "get") == 0) { if (!pool_name || nargs.size() < 3) -- 2.39.5