mirror of
https://github.com/ceph/ceph
synced 2025-03-11 02:39:05 +00:00
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:
parent
26f5b2f58e
commit
ae5660fbb6
@ -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
|
||||
--------
|
||||
|
@ -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
|
||||
|
@ -15,6 +15,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "rgw_rest.h"
|
||||
#include "rgw_rest_s3.h"
|
||||
#include "rgw_metadata.h"
|
||||
#include "rgw_mdlog.h"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user