From: Adam C. Emerson Date: Thu, 30 Apr 2020 20:38:41 +0000 (-0400) Subject: rgw: Remove date from REST log trim/list X-Git-Tag: v16.1.0~1154^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ae5660fbb663e84f5bb2319939a3f32c193d97f4;p=ceph.git rgw: Remove date from REST log trim/list Also only accept one marker. Signed-off-by: Adam C. Emerson --- diff --git a/PendingReleaseNotes b/PendingReleaseNotes index 4b492be526d8..55e9bfa6b80e 100644 --- a/PendingReleaseNotes +++ b/PendingReleaseNotes @@ -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 -------- diff --git a/src/rgw/rgw_rest_log.cc b/src/rgw/rgw_rest_log.cc index c0e0aa6b86d0..d89ae20c99bf 100644 --- a/src/rgw/rgw_rest_log.cc +++ b/src/rgw/rgw_rest_log.cc @@ -38,46 +38,24 @@ #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; - shard_id = (unsigned)strict_strtol(shard.c_str(), 10, &err); - if (!err.empty()) { - dout(5) << "Error parsing shard_id " << shard << dendl; + 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; - return; } - if (parse_date_str(st, ut_st) < 0) { - http_ret = -EINVAL; - return; - } - - if (parse_date_str(et, ut_et) < 0) { + 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; } @@ -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,36 +175,43 @@ 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; - http_ret = 0; - shard_id = (unsigned)strict_strtol(shard.c_str(), 10, &err); - if (!err.empty()) { - dout(5) << "Error parsing shard_id " << shard << dendl; + 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; - return; } - if (et.empty() && end_marker.empty()) { /* bounding end */ + + if (s->info.args.exists("start-marker")) { + dout(5) << "start-marker is no longer accepted" << dendl; http_ret = -EINVAL; - return; } - if (parse_date_str(st, ut_st) < 0) { + 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); + if (!err.empty()) { + dout(5) << "Error parsing shard_id " << shard << dendl; 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; - shard_id = (unsigned)strict_strtol(shard.c_str(), 10, &err); - if (!err.empty()) { - dout(5) << "Error parsing shard_id " << shard << dendl; + 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; - return; } - if (et.empty() && end_marker.empty()) { /* bounding end */ + + if (s->info.args.exists("start-marker")) { + dout(5) << "start-marker is no longer accepted" << dendl; http_ret = -EINVAL; - return; } - if (parse_date_str(st, ut_st) < 0) { + 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 (parse_date_str(et, ut_et) < 0) { + if (marker.empty()) { /* bounding end */ 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 diff --git a/src/rgw/rgw_rest_log.h b/src/rgw/rgw_rest_log.h index 62d0ba8334dd..1b6cb7217f18 100644 --- a/src/rgw/rgw_rest_log.h +++ b/src/rgw/rgw_rest_log.h @@ -15,6 +15,8 @@ #pragma once +#include "rgw_rest.h" +#include "rgw_rest_s3.h" #include "rgw_metadata.h" #include "rgw_mdlog.h"