]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cls/rgw: make usage_iterate_range()'s "truncated" parameter trustworthy
authorGreg Farnum <gfarnum@redhat.com>
Tue, 6 Mar 2018 00:40:41 +0000 (16:40 -0800)
committerAbhishek Lekshmanan <abhishek@suse.com>
Thu, 12 Apr 2018 17:27:35 +0000 (19:27 +0200)
Set it to false whenever we identify that we've reached the end of our
range, even if the underlying OSD op says it could have given us more
results. Then rely on that instead of weird iter-based logic to tell
our client that it doesn't need to do more work.

Fixes: https://tracker.ceph.com/issues/22963
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
(cherry picked from commit 7ea8ca81f7c5ec9d3a6fc627be4f024a17397497)

src/cls/rgw/cls_rgw.cc

index dbf61a40a1385f95bcb45703ef8507ce8f1458ea..cff718e6229d62832b42835ad4fc509fe478ba51 100644 (file)
@@ -2958,12 +2958,18 @@ static int usage_iterate_range(cls_method_context_t hctx, uint64_t start, uint64
 
     if (!by_user && key.compare(end_key) >= 0) {
       CLS_LOG(20, "usage_iterate_range reached key=%s, done", key.c_str());
+      if (truncated) {
+       *truncated = false;
+      }
       key_iter = key;
       return 0;
     }
 
     if (by_user && key.compare(0, user_key.size(), user_key) != 0) {
       CLS_LOG(20, "usage_iterate_range reached key=%s, done", key.c_str());
+      if (truncated) {
+       *truncated = false;
+      }
       key_iter = key;
       return 0;
     }
@@ -3080,7 +3086,7 @@ int rgw_user_usage_log_trim(cls_method_context_t hctx, bufferlist *in, bufferlis
   if (ret < 0)
     return ret;
 
-  if (!more && iter.empty())
+  if (!more)
     return -ENODATA;
 
   return 0;