From: Yehuda Sadeh Date: Thu, 19 Sep 2013 18:47:34 +0000 (-0700) Subject: radosgw-admin: add some conditions for bucket rewrite X-Git-Tag: v0.81~110^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6f2ee99a225bbfa5dfcb8277eb1f0334b47ac8c4;p=ceph.git radosgw-admin: add some conditions for bucket rewrite --min-rewrite-size, --max-rewrite-size to specify object size conditions --start-date, --end-date to specify object mtime conditions (format is YYYY-MM-DD[ HH:MM:SS]) Signed-off-by: Yehuda Sadeh (cherry picked from commit dbb2013eaf1eedf2a5cbcae1d314385ea033dbb8) --- diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 6d8815605551..b452e2714c8d 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -830,6 +830,9 @@ int main(int argc, char **argv) int sync_stats = false; + uint64_t min_rewrite_size = 4 * 1024 * 1024; + uint64_t max_rewrite_size = ULLONG_MAX; + std::string val; std::ostringstream errs; string err; @@ -893,6 +896,10 @@ int main(int argc, char **argv) cerr << errs.str() << std::endl; exit(EXIT_FAILURE); } + } else if (ceph_argparse_witharg(args, i, &val, "--min-rewrite-size", (char*)NULL)) { + min_rewrite_size = (uint64_t)atoll(val.c_str()); + } else if (ceph_argparse_witharg(args, i, &val, "--max-rewrite-size", (char*)NULL)) { + max_rewrite_size = (uint64_t)atoll(val.c_str()); } else if (ceph_argparse_witharg(args, i, &val, "--max-buckets", (char*)NULL)) { max_buckets = atoi(val.c_str()); } else if (ceph_argparse_witharg(args, i, &val, "--max-entries", (char*)NULL)) { @@ -1862,6 +1869,24 @@ next: return -ret; } + uint64_t start_epoch = 0; + uint64_t end_epoch = 0; + + if (!end_date.empty()) { + int ret = utime_t::parse_date(end_date, &end_epoch, NULL); + if (ret < 0) { + cerr << "ERROR: failed to parse end date" << std::endl; + return EINVAL; + } + } + if (!start_date.empty()) { + int ret = utime_t::parse_date(start_date, &start_epoch, NULL); + if (ret < 0) { + cerr << "ERROR: failed to parse start date" << std::endl; + return EINVAL; + } + } + bool is_truncated = true; string marker; @@ -1887,19 +1912,27 @@ next: map::iterator iter; for (iter = result.begin(); iter != result.end(); ++iter) { string name = iter->first; + RGWObjEnt& entry = iter->second; formatter->open_object_section("object"); - formatter->dump_string("name", iter->first); - formatter->dump_int("size", iter->second.size); - utime_t ut(iter->second.mtime, 0); + formatter->dump_string("name", name); + formatter->dump_int("size", entry.size); + utime_t ut(entry.mtime, 0); ut.gmtime(formatter->dump_stream("mtime")); - rgw_obj obj(bucket, name); - r = store->rewrite_obj(obj); - if (r == 0) { - formatter->dump_string("status", "Success"); + if ((entry.size < min_rewrite_size) || + (entry.size > max_rewrite_size) || + (start_epoch > 0 && start_epoch > (uint64_t)ut.sec()) || + (end_epoch > 0 && end_epoch < (uint64_t)ut.sec())) { + formatter->dump_string("status", "Skipped"); } else { - formatter->dump_string("status", cpp_strerror(-r)); + rgw_obj obj(bucket, name); + r = store->rewrite_obj(obj); + if (r == 0) { + formatter->dump_string("status", "Success"); + } else { + formatter->dump_string("status", cpp_strerror(-r)); + } } formatter->close_section();