]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: Remove date from REST log trim/list
authorAdam C. Emerson <aemerson@redhat.com>
Thu, 30 Apr 2020 20:38:41 +0000 (16:38 -0400)
committerAdam C. Emerson <aemerson@redhat.com>
Wed, 9 Sep 2020 02:09:40 +0000 (22:09 -0400)
Also only accept one marker.

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
PendingReleaseNotes
src/rgw/rgw_rest_log.cc
src/rgw/rgw_rest_log.h

index 4b492be526d8e254d48053e551d97f1a8911fc55..55e9bfa6b80e7aae7187be23e007799c0e2a03a8 100644 (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
 --------
index c0e0aa6b86d0cc8cb843a5b0b4bb9cf3ad41cff3..d89ae20c99bf8dc327c18baa5446d0a7d893584c 100644 (file)
 #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
index 62d0ba8334dde04c807e0cb0c596e24f1d5dfafe..1b6cb7217f181bf236f13f4bbca9bc2236dd6fef 100644 (file)
@@ -15,6 +15,8 @@
 
 #pragma once
 
+#include "rgw_rest.h"
+#include "rgw_rest_s3.h"
 #include "rgw_metadata.h"
 #include "rgw_mdlog.h"