rgw: Remove date from REST log trim/list

Also only accept one marker.

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
This commit is contained in:
Adam C. Emerson 2020-04-30 16:38:41 -04:00
parent 26f5b2f58e
commit ae5660fbb6
3 changed files with 72 additions and 84 deletions

View File

@ -6,6 +6,8 @@
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.
* Similarly the date ranges and marker ranges have been removed on
the RESTful DATALog and MDLog list and trim operations.
>=15.0.0
--------

View File

@ -38,33 +38,21 @@
#define LOG_CLASS_LIST_MAX_ENTRIES (1000)
#define dout_subsys ceph_subsys_rgw
static int parse_date_str(string& in, real_time& out) {
uint64_t epoch = 0;
uint64_t nsec = 0;
if (!in.empty()) {
if (utime_t::parse_date(in, &epoch, &nsec) < 0) {
dout(5) << "Error parsing date " << in << dendl;
return -EINVAL;
}
}
out = utime_t(epoch, nsec).to_real_time();
return 0;
}
void RGWOp_MDLog_List::execute() {
string period = s->info.args.get("period");
string shard = s->info.args.get("id");
string max_entries_str = s->info.args.get("max-entries");
string st = s->info.args.get("start-time"),
et = s->info.args.get("end-time"),
marker = s->info.args.get("marker"),
string marker = s->info.args.get("marker"),
err;
real_time ut_st,
ut_et;
void *handle;
unsigned shard_id, max_entries = LOG_CLASS_LIST_MAX_ENTRIES;
if (s->info.args.exists("start-time") ||
s->info.args.exists("end-time")) {
dout(5) << "start-time and end-time are no longer accepted" << dendl;
http_ret = -EINVAL;
}
shard_id = (unsigned)strict_strtol(shard.c_str(), 10, &err);
if (!err.empty()) {
dout(5) << "Error parsing shard_id " << shard << dendl;
@ -72,16 +60,6 @@ void RGWOp_MDLog_List::execute() {
return;
}
if (parse_date_str(st, ut_st) < 0) {
http_ret = -EINVAL;
return;
}
if (parse_date_str(et, ut_et) < 0) {
http_ret = -EINVAL;
return;
}
if (!max_entries_str.empty()) {
max_entries = (unsigned)strict_strtol(max_entries_str.c_str(), 10, &err);
if (!err.empty()) {
@ -92,7 +70,7 @@ void RGWOp_MDLog_List::execute() {
if (max_entries > LOG_CLASS_LIST_MAX_ENTRIES) {
max_entries = LOG_CLASS_LIST_MAX_ENTRIES;
}
}
}
if (period.empty()) {
ldout(s->cct, 5) << "Missing period id trying to use current" << dendl;
@ -106,7 +84,7 @@ void RGWOp_MDLog_List::execute() {
RGWMetadataLog meta_log{s->cct, store->svc()->zone, store->svc()->cls, period};
meta_log.init_list_entries(shard_id, ut_st, ut_et, marker, &handle);
meta_log.init_list_entries(shard_id, {}, {}, marker, &handle);
http_ret = meta_log.list_entries(handle, max_entries, entries,
&last_marker, &truncated);
@ -197,17 +175,33 @@ void RGWOp_MDLog_ShardInfo::send_response() {
}
void RGWOp_MDLog_Delete::execute() {
string st = s->info.args.get("start-time"),
et = s->info.args.get("end-time"),
start_marker = s->info.args.get("start-marker"),
end_marker = s->info.args.get("end-marker"),
string marker = s->info.args.get("marker"),
period = s->info.args.get("period"),
shard = s->info.args.get("id"),
err;
real_time ut_st,
ut_et;
unsigned shard_id;
if (s->info.args.exists("start-time") ||
s->info.args.exists("end-time")) {
dout(5) << "start-time and end-time are no longer accepted" << dendl;
http_ret = -EINVAL;
}
if (s->info.args.exists("start-marker")) {
dout(5) << "start-marker is no longer accepted" << dendl;
http_ret = -EINVAL;
}
if (s->info.args.exists("end-marker")) {
if (!s->info.args.exists("marker")) {
marker = s->info.args.get("end-marker");
} else {
dout(5) << "end-marker and marker cannot both be provided" << dendl;
http_ret = -EINVAL;
}
}
http_ret = 0;
shard_id = (unsigned)strict_strtol(shard.c_str(), 10, &err);
@ -216,17 +210,8 @@ void RGWOp_MDLog_Delete::execute() {
http_ret = -EINVAL;
return;
}
if (et.empty() && end_marker.empty()) { /* bounding end */
http_ret = -EINVAL;
return;
}
if (parse_date_str(st, ut_st) < 0) {
http_ret = -EINVAL;
return;
}
if (parse_date_str(et, ut_et) < 0) {
if (marker.empty()) { /* bounding end */
http_ret = -EINVAL;
return;
}
@ -243,7 +228,7 @@ void RGWOp_MDLog_Delete::execute() {
}
RGWMetadataLog meta_log{s->cct, store->svc()->zone, store->svc()->cls, period};
http_ret = meta_log.trim(shard_id, ut_st, ut_et, start_marker, end_marker);
http_ret = meta_log.trim(shard_id, {}, {}, {}, marker);
}
void RGWOp_MDLog_Lock::execute() {
@ -577,15 +562,17 @@ void RGWOp_BILog_Delete::execute() {
void RGWOp_DATALog_List::execute() {
string shard = s->info.args.get("id");
string st = s->info.args.get("start-time"),
et = s->info.args.get("end-time"),
max_entries_str = s->info.args.get("max-entries"),
string max_entries_str = s->info.args.get("max-entries"),
marker = s->info.args.get("marker"),
err;
real_time ut_st,
ut_et;
unsigned shard_id, max_entries = LOG_CLASS_LIST_MAX_ENTRIES;
if (s->info.args.exists("start-time") ||
s->info.args.exists("end-time")) {
dout(5) << "start-time and end-time are no longer accepted" << dendl;
http_ret = -EINVAL;
}
s->info.args.get_bool("extra-info", &extra_info, false);
shard_id = (unsigned)strict_strtol(shard.c_str(), 10, &err);
@ -595,16 +582,6 @@ void RGWOp_DATALog_List::execute() {
return;
}
if (parse_date_str(st, ut_st) < 0) {
http_ret = -EINVAL;
return;
}
if (parse_date_str(et, ut_et) < 0) {
http_ret = -EINVAL;
return;
}
if (!max_entries_str.empty()) {
max_entries = (unsigned)strict_strtol(max_entries_str.c_str(), 10, &err);
if (!err.empty()) {
@ -619,9 +596,10 @@ void RGWOp_DATALog_List::execute() {
// Note that last_marker is updated to be the marker of the last
// entry listed
http_ret = store->svc()->datalog_rados->list_entries(shard_id, ut_st, ut_et,
max_entries, entries, marker,
&last_marker, &truncated);
http_ret = store->svc()->datalog_rados->list_entries(shard_id, {}, {},
max_entries, entries,
marker, &last_marker,
&truncated);
}
void RGWOp_DATALog_List::send_response() {
@ -741,40 +719,46 @@ void RGWOp_DATALog_Notify::execute() {
}
void RGWOp_DATALog_Delete::execute() {
string st = s->info.args.get("start-time"),
et = s->info.args.get("end-time"),
start_marker = s->info.args.get("start-marker"),
end_marker = s->info.args.get("end-marker"),
string marker = s->info.args.get("marker"),
shard = s->info.args.get("id"),
err;
real_time ut_st,
ut_et;
unsigned shard_id;
http_ret = 0;
if (s->info.args.exists("start-time") ||
s->info.args.exists("end-time")) {
dout(5) << "start-time and end-time are no longer accepted" << dendl;
http_ret = -EINVAL;
}
if (s->info.args.exists("start-marker")) {
dout(5) << "start-marker is no longer accepted" << dendl;
http_ret = -EINVAL;
}
if (s->info.args.exists("end-marker")) {
if (!s->info.args.exists("marker")) {
marker = s->info.args.get("end-marker");
} else {
dout(5) << "end-marker and marker cannot both be provided" << dendl;
http_ret = -EINVAL;
}
}
shard_id = (unsigned)strict_strtol(shard.c_str(), 10, &err);
if (!err.empty()) {
dout(5) << "Error parsing shard_id " << shard << dendl;
http_ret = -EINVAL;
return;
}
if (et.empty() && end_marker.empty()) { /* bounding end */
if (marker.empty()) { /* bounding end */
http_ret = -EINVAL;
return;
}
if (parse_date_str(st, ut_st) < 0) {
http_ret = -EINVAL;
return;
}
if (parse_date_str(et, ut_et) < 0) {
http_ret = -EINVAL;
return;
}
http_ret = store->svc()->datalog_rados->trim_entries(shard_id, ut_st, ut_et, start_marker, end_marker);
http_ret = store->svc()->datalog_rados->trim_entries(shard_id, {}, {}, {},
marker);
}
// not in header to avoid pulling in rgw_sync.h

View File

@ -15,6 +15,8 @@
#pragma once
#include "rgw_rest.h"
#include "rgw_rest_s3.h"
#include "rgw_metadata.h"
#include "rgw_mdlog.h"