summaryrefslogtreecommitdiff
path: root/src/rgw/rgw_admin.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/rgw/rgw_admin.cc')
-rw-r--r--src/rgw/rgw_admin.cc50
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);