mirror of
https://github.com/ceph/ceph
synced 2025-03-11 02:39:05 +00:00
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 <aemerson@redhat.com>
This commit is contained in:
parent
6110ba6058
commit
26f5b2f58e
@ -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.
|
||||
|
||||
|
@ -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 <class T>
|
||||
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<cls_log_entry> 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<cls_log_entry> 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<rgw_data_change_log_entry> 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) {
|
||||
|
@ -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,
|
||||
|
@ -135,7 +135,7 @@ int RGWMetadataLog::store_entries_in_shard(list<cls_log_entry>& 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();
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user