diff options
Diffstat (limited to 'src/rgw/rgw_admin.cc')
-rw-r--r-- | src/rgw/rgw_admin.cc | 50 |
1 files changed, 43 insertions, 7 deletions
diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 781206cbb69..2791eac7fea 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -85,6 +85,7 @@ void _usage() cerr << " gc process manually process garbage\n"; cerr << " metadata get get metadata info\n"; cerr << " metadata put put metadata info\n"; + cerr << " metadata rm remove metadata info\n"; cerr << " metadata list list metadata info\n"; cerr << " mdlog show show metadata log\n"; cerr << "options:\n"; @@ -190,6 +191,7 @@ enum { OPT_CAPS_RM, OPT_METADATA_GET, OPT_METADATA_PUT, + OPT_METADATA_RM, OPT_METADATA_LIST, OPT_MDLOG_SHOW, }; @@ -361,6 +363,8 @@ static int get_cmd(const char *cmd, const char *prev_cmd, bool *need_more) return OPT_METADATA_GET; if (strcmp(cmd, "put") == 0) return OPT_METADATA_PUT; + if (strcmp(cmd, "rm") == 0) + return OPT_METADATA_RM; if (strcmp(cmd, "list") == 0) return OPT_METADATA_LIST; } else if (strcmp(prev_cmd, "mdlog") == 0) { @@ -830,6 +834,23 @@ public: } }; +static int parse_date_str(const string& date_str, utime_t& ut) +{ + uint64_t epoch = 0; + + if (!date_str.empty()) { + int ret = parse_date(date_str, &epoch); + if (ret < 0) { + cerr << "ERROR: failed to parse date: " << date_str << std::endl; + return -EINVAL; + } + } + + ut = utime_t(epoch, 0); + + return 0; +} + int main(int argc, char **argv) { vector<const char*> args; @@ -1012,6 +1033,7 @@ int main(int argc, char **argv) switch (opt_cmd) { case OPT_METADATA_GET: case OPT_METADATA_PUT: + case OPT_METADATA_RM: case OPT_METADATA_LIST: metadata_key = *i; break; @@ -1482,7 +1504,7 @@ int main(int argc, char **argv) info.subusers[subuser] = u; } - if ((err = rgw_store_user_info(store, info, &old_info, NULL, false)) < 0) { + if ((err = rgw_store_user_info(store, info, &old_info, &objv_tracker, false)) < 0) { cerr << "error storing user info: " << cpp_strerror(-err) << std::endl; break; } @@ -2191,6 +2213,14 @@ next: } } + if (opt_cmd == OPT_METADATA_RM) { + int ret = store->meta_mgr->remove(metadata_key); + if (ret < 0) { + cerr << "ERROR: can't remove key: " << cpp_strerror(-ret) << std::endl; + return -ret; + } + } + if (opt_cmd == OPT_METADATA_LIST) { void *handle; int max = 1000; @@ -2229,11 +2259,19 @@ next: void *handle; list<cls_log_entry> entries; + utime_t start_time, end_time; + + int ret = parse_date_str(start_date, start_time); + if (ret < 0) + return -ret; + + ret = parse_date_str(end_date, end_time); + if (ret < 0) + return -ret; + RGWMetadataLog *meta_log = store->meta_mgr->get_log(); - utime_t from_time; - utime_t end_time; - meta_log->init_list_entries(store, from_time, end_time, &handle); + meta_log->init_list_entries(store, start_time, end_time, &handle); bool truncated; @@ -2247,9 +2285,7 @@ next: for (list<cls_log_entry>::iterator iter = entries.begin(); iter != entries.end(); ++iter) { cls_log_entry& entry = *iter; - formatter->open_object_section("entry"); - formatter->dump_string("name", entry.name); - formatter->close_section(); + store->meta_mgr->dump_log_entry(entry, formatter); } formatter->flush(cout); } while (truncated); |