]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: update the usage read iterator in truncated scenario 18437/head
authorMark Kogan <mkogan@redhat.com>
Mon, 25 Sep 2017 06:53:00 +0000 (09:53 +0300)
committerAbhishek Lekshmanan <abhishek@suse.com>
Fri, 20 Oct 2017 14:59:09 +0000 (16:59 +0200)
Fixes: http://tracker.ceph.com/issues/21196
Signed-off-by: Mark Kogan <mkogan@redhat.com>
(cherry picked from commit 7306514a813661b77bfcbfc6f534dbabbdd3aa78)

src/cls/rgw/cls_rgw.cc

index 17a618053a61effcb2185ba148fa93bf411b7bbe..b3e40fc26501fb026de193a3bd6c6957f0ced5b9 100644 (file)
@@ -2900,9 +2900,7 @@ static int usage_iterate_range(cls_method_context_t hctx, uint64_t start, uint64
   bool by_user = !user.empty();
   uint32_t i = 0;
   string user_key;
-
-  if (truncated)
-    *truncated = false;
+  bool truncated_status = false;
 
   if (!by_user) {
     usage_record_prefix_by_time(end, end_key);
@@ -2922,11 +2920,14 @@ static int usage_iterate_range(cls_method_context_t hctx, uint64_t start, uint64
   }
 
   CLS_LOG(20, "usage_iterate_range start_key=%s", start_key.c_str());
-  int ret = cls_cxx_map_get_vals(hctx, start_key, filter_prefix, max_entries, &keys, truncated);
+  int ret = cls_cxx_map_get_vals(hctx, start_key, filter_prefix, max_entries, &keys, &truncated_status);
   if (ret < 0)
     return ret;
 
-
+  if (truncated) {
+    *truncated = truncated_status;
+  }
+      
   map<string, bufferlist>::iterator iter = keys.begin();
   if (iter == keys.end())
     return 0;
@@ -2939,11 +2940,17 @@ 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_status) {
+        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_status) {
+        key_iter = key;
+      }
       return 0;
     }