From: Adam C. Emerson Date: Thu, 30 Apr 2020 19:06:13 +0000 (-0400) Subject: rgw: Remove some TimeLog options from radosgw-admin X-Git-Tag: v16.1.0~1154^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=26f5b2f58efc9e489fe314b41d8ec8bc00a9f0c7;p=ceph.git rgw: Remove some TimeLog options from radosgw-admin Remove date-oriented trim/list functionality from MDLOG, DataLog, and Sync-Error-Log. Don't provide start/end markers. Support only a start marker for list and an end marker for trim. Signed-off-by: Adam C. Emerson --- diff --git a/PendingReleaseNotes b/PendingReleaseNotes index 4a1ea224c036..4b492be526d8 100644 --- a/PendingReleaseNotes +++ b/PendingReleaseNotes @@ -1,5 +1,14 @@ >=16.0.0 -------- +* The allowable options for some "radosgw-admin" commands have been changed. + + * "mdlog-list", "datalog-list", "sync-error-list" no longer accepts + start and end dates, but does accept a single optional start marker. + * "mdlog-trim", "datalog-trim", "sync-error-trim" only accept a + single marker giving the end of the trimmed range. + +>=15.0.0 +-------- * The ``ceph df`` command now lists the number of pgs in each pool. diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 24e47b7d9bc8..bf28b6f6133a 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -234,8 +234,7 @@ void usage() cout << " metadata rm remove metadata info\n"; cout << " metadata list list metadata info\n"; cout << " mdlog list list metadata log\n"; - cout << " mdlog trim trim metadata log (use start-date, end-date or\n"; - cout << " start-marker, end-marker)\n"; + cout << " mdlog trim trim metadata log (use marker)\n"; cout << " mdlog status read metadata log status\n"; cout << " bilog list list bucket index log\n"; cout << " bilog trim trim bucket index log (use start-marker, end-marker)\n"; @@ -1203,24 +1202,6 @@ static int read_decode_json(const string& infile, T& t, K *k) return 0; } -static int parse_date_str(const string& date_str, utime_t& ut) -{ - uint64_t epoch = 0; - uint64_t nsec = 0; - - if (!date_str.empty()) { - int ret = utime_t::parse_date(date_str, &epoch, &nsec); - if (ret < 0) { - cerr << "ERROR: failed to parse date: " << date_str << std::endl; - return -EINVAL; - } - } - - ut = utime_t(epoch, nsec); - - return 0; -} - template static bool decode_dump(const char *field_name, bufferlist& bl, Formatter *f) { @@ -2792,18 +2773,14 @@ static int scan_totp(CephContext *cct, ceph::real_time& now, rados::cls::otp::ot return -ENOENT; } -static int trim_sync_error_log(int shard_id, const ceph::real_time& start_time, - const ceph::real_time& end_time, - const string& start_marker, const string& end_marker, - int delay_ms) +static int trim_sync_error_log(int shard_id, const string& marker, int delay_ms) { auto oid = RGWSyncErrorLogger::get_shard_oid(RGW_SYNC_ERROR_LOG_SHARD_PREFIX, shard_id); // call cls_log_trim() until it returns -ENODATA for (;;) { - int ret = store->svc()->cls->timelog.trim(oid, start_time, end_time, - start_marker, end_marker, nullptr, - null_yield); + int ret = store->svc()->cls->timelog.trim(oid, {}, {}, {}, marker, nullptr, + null_yield); if (ret == -ENODATA) { return 0; } @@ -7572,15 +7549,26 @@ next: } if (opt_cmd == OPT::MDLOG_LIST) { - 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; + if (!start_date.empty()) { + std::cerr << "start-date not allowed." << std::endl; + return -EINVAL; + } + if (!end_date.empty()) { + std::cerr << "end-date not allowed." << std::endl; + return -EINVAL; + } + if (!end_marker.empty()) { + std::cerr << "end-marker not allowed." << std::endl; + return -EINVAL; + } + if (!start_marker.empty()) { + if (marker.empty()) { + marker = start_marker; + } else { + std::cerr << "start-marker and marker not both allowed." << std::endl; + return -EINVAL; + } + } int i = (specified_shard_id ? shard_id : 0); @@ -7599,8 +7587,7 @@ next: void *handle; list entries; - - meta_log->init_list_entries(i, start_time.to_real_time(), end_time.to_real_time(), marker, &handle); + meta_log->init_list_entries(i, {}, {}, marker, &handle); bool truncated; do { int ret = meta_log->list_entries(handle, 1000, entries, NULL, &truncated); @@ -7678,21 +7665,32 @@ next: } if (opt_cmd == OPT::MDLOG_TRIM) { - utime_t start_time, end_time; + if (!start_date.empty()) { + std::cerr << "start-date not allowed." << std::endl; + return -EINVAL; + } + if (!end_date.empty()) { + std::cerr << "end-date not allowed." << std::endl; + return -EINVAL; + } + if (!start_marker.empty()) { + std::cerr << "start-marker not allowed." << std::endl; + return -EINVAL; + } + if (!end_marker.empty()) { + if (marker.empty()) { + marker = end_marker; + } else { + std::cerr << "end-marker and marker not both allowed." << std::endl; + return -EINVAL; + } + } if (!specified_shard_id) { cerr << "ERROR: shard-id must be specified for trim operation" << std::endl; return EINVAL; } - 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; - if (period_id.empty()) { std::cerr << "missing --period argument" << std::endl; return EINVAL; @@ -7701,8 +7699,7 @@ next: // trim until -ENODATA do { - ret = meta_log->trim(shard_id, start_time.to_real_time(), - end_time.to_real_time(), start_marker, end_marker); + ret = meta_log->trim(shard_id, {}, {}, {}, marker); } while (ret == 0); if (ret < 0 && ret != -ENODATA) { cerr << "ERROR: meta_log->trim(): " << cpp_strerror(-ret) << std::endl; @@ -8096,17 +8093,28 @@ next: if (max_entries < 0) { max_entries = 1000; } + if (!start_date.empty()) { + std::cerr << "start-date not allowed." << std::endl; + return -EINVAL; + } + if (!end_date.empty()) { + std::cerr << "end-date not allowed." << std::endl; + return -EINVAL; + } + if (!end_marker.empty()) { + std::cerr << "end-marker not allowed." << std::endl; + return -EINVAL; + } + if (!start_marker.empty()) { + if (marker.empty()) { + marker = start_marker; + } else { + std::cerr << "start-marker and marker not both allowed." << std::endl; + return -EINVAL; + } + } bool truncated; - 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; if (shard_id < 0) { shard_id = 0; @@ -8124,11 +8132,10 @@ next: do { list entries; - ret = store->svc()->cls->timelog.list(oid, start_time.to_real_time(), end_time.to_real_time(), - max_entries - count, entries, marker, &marker, &truncated, - null_yield); - if (ret == -ENOENT) { - break; + ret = store->svc()->cls->timelog.list(oid, {}, {}, max_entries - count, entries, marker, &marker, &truncated, + null_yield); + if (ret == -ENOENT) { + break; } if (ret < 0) { cerr << "ERROR: svc.cls->timelog.list(): " << cpp_strerror(-ret) << std::endl; @@ -8171,23 +8178,29 @@ next: } if (opt_cmd == OPT::SYNC_ERROR_TRIM) { - 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; + if (!start_date.empty()) { + std::cerr << "start-date not allowed." << std::endl; + return -EINVAL; + } + if (!end_date.empty()) { + std::cerr << "end-date not allowed." << std::endl; + return -EINVAL; + } + if (!start_marker.empty()) { + std::cerr << "end-date not allowed." << std::endl; + return -EINVAL; + } + if (!end_marker.empty()) { + std::cerr << "end-date not allowed." << std::endl; + return -EINVAL; + } if (shard_id < 0) { shard_id = 0; } for (; shard_id < ERROR_LOGGER_SHARDS; ++shard_id) { - ret = trim_sync_error_log(shard_id, start_time.to_real_time(), - end_time.to_real_time(), start_marker, - end_marker, trim_delay_ms); + ret = trim_sync_error_log(shard_id, marker, trim_delay_ms); if (ret < 0) { cerr << "ERROR: sync error trim: " << cpp_strerror(-ret) << std::endl; return -ret; @@ -8599,16 +8612,26 @@ next: int count = 0; if (max_entries < 0) max_entries = 1000; - - 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; + if (!start_date.empty()) { + std::cerr << "start-date not allowed." << std::endl; + return -EINVAL; + } + if (!end_date.empty()) { + std::cerr << "end-date not allowed." << std::endl; + return -EINVAL; + } + if (!end_marker.empty()) { + std::cerr << "end-marker not allowed." << std::endl; + return -EINVAL; + } + if (!start_marker.empty()) { + if (marker.empty()) { + marker = start_marker; + } else { + std::cerr << "start-marker and marker not both allowed." << std::endl; + return -EINVAL; + } + } auto datalog_svc = store->svc()->datalog_rados; RGWDataChangesLog::LogMarker log_marker; @@ -8616,9 +8639,11 @@ next: do { list entries; if (specified_shard_id) { - ret = datalog_svc->list_entries(shard_id, start_time.to_real_time(), end_time.to_real_time(), max_entries - count, entries, marker, &marker, &truncated); + ret = datalog_svc->list_entries(shard_id, {}, {}, max_entries - count, + entries, marker, &marker, &truncated); } else { - ret = datalog_svc->list_entries(start_time.to_real_time(), end_time.to_real_time(), max_entries - count, entries, log_marker, &truncated); + ret = datalog_svc->list_entries({}, {}, max_entries - count, entries, + log_marker, &truncated); } if (ret < 0) { cerr << "ERROR: list_bi_log_entries(): " << cpp_strerror(-ret) << std::endl; @@ -8681,15 +8706,26 @@ next: } if (opt_cmd == OPT::DATALOG_TRIM) { - 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; + if (!start_date.empty()) { + std::cerr << "start-date not allowed." << std::endl; + return -EINVAL; + } + if (!end_date.empty()) { + std::cerr << "end-date not allowed." << std::endl; + return -EINVAL; + } + if (!start_marker.empty()) { + std::cerr << "start-marker not allowed." << std::endl; + return -EINVAL; + } + if (!end_marker.empty()) { + if (marker.empty()) { + marker = end_marker; + } else { + std::cerr << "end-marker and marker not both allowed." << std::endl; + return -EINVAL; + } + } if (!specified_shard_id) { cerr << "ERROR: requires a --shard-id" << std::endl; @@ -8699,9 +8735,7 @@ next: // loop until -ENODATA do { auto datalog = store->svc()->datalog_rados; - ret = datalog->trim_entries(shard_id, start_time.to_real_time(), - end_time.to_real_time(), - start_marker, end_marker); + ret = datalog->trim_entries(shard_id, {}, {}, {}, marker); } while (ret == 0); if (ret < 0 && ret != -ENODATA) { diff --git a/src/rgw/rgw_mdlog.h b/src/rgw/rgw_mdlog.h index 90385cc39ebf..9064f8c04178 100644 --- a/src/rgw/rgw_mdlog.h +++ b/src/rgw/rgw_mdlog.h @@ -117,7 +117,9 @@ public: LogListCtx() : cur_shard(0), done(false) {} }; - void init_list_entries(int shard_id, const real_time& from_time, const real_time& end_time, string& marker, void **handle); + void init_list_entries(int shard_id, const real_time& from_time, + const real_time& end_time, const string& marker, + void **handle); void complete_list_entries(void *handle); int list_entries(void *handle, int max_entries, diff --git a/src/rgw/rgw_metadata.cc b/src/rgw/rgw_metadata.cc index ba4863e74339..713f6b780f27 100644 --- a/src/rgw/rgw_metadata.cc +++ b/src/rgw/rgw_metadata.cc @@ -135,7 +135,7 @@ int RGWMetadataLog::store_entries_in_shard(list& entries, int sha } void RGWMetadataLog::init_list_entries(int shard_id, const real_time& from_time, const real_time& end_time, - string& marker, void **handle) + const string& marker, void **handle) { LogListCtx *ctx = new LogListCtx(); diff --git a/src/test/cli/radosgw-admin/help.t b/src/test/cli/radosgw-admin/help.t index 220d5da7b0c1..c22230627593 100644 --- a/src/test/cli/radosgw-admin/help.t +++ b/src/test/cli/radosgw-admin/help.t @@ -129,8 +129,7 @@ metadata rm remove metadata info metadata list list metadata info mdlog list list metadata log - mdlog trim trim metadata log (use start-date, end-date or - start-marker, end-marker) + mdlog trim trim metadata log (use marker) mdlog status read metadata log status bilog list list bucket index log bilog trim trim bucket index log (use start-marker, end-marker)