]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
os/kstore: fix collection_list properly set next if end reached
authorMykola Golub <mgolub@suse.com>
Wed, 19 Aug 2020 10:16:12 +0000 (11:16 +0100)
committerMykola Golub <mgolub@suse.com>
Sat, 29 Aug 2020 17:24:44 +0000 (18:24 +0100)
Previously it was setting it to GMAX (happened when one had end
set to not GMAX and max set to INT_MAX).

Signed-off-by: Mykola Golub <mgolub@suse.com>
src/os/kstore/KStore.cc

index 9c701fdbd89756917db04377eb7ed7fbcb9f61ce..8f6b19bda38a291166430bba21161e4a6ec552a7 100644 (file)
@@ -1495,14 +1495,16 @@ int KStore::_collection_list(
   if (end.hobj.is_max()) {
     pend = temp ? temp_end_key : end_key;
   } else {
-    get_object_key(cct, end, &end_key);
     if (end.hobj.is_temp()) {
       if (temp)
-       pend = end_key;
+        get_object_key(cct, end, &pend);
       else
        goto out;
     } else {
-      pend = temp ? temp_end_key : end_key;
+      if (temp)
+        pend = temp_end_key;
+      else
+        get_object_key(cct, end, &pend);
     }
   }
   dout(20) << __func__ << " pend " << pretty_binary_string(pend) << dendl;
@@ -1515,15 +1517,28 @@ int KStore::_collection_list(
                 << " > " << end << dendl;
       if (temp) {
        if (end.hobj.is_temp()) {
+          if (it->valid() && it->key() < temp_end_key) {
+            int r = get_key_object(it->key(), pnext);
+            ceph_assert(r == 0);
+            set_next = true;
+          }
          break;
        }
        dout(30) << __func__ << " switch to non-temp namespace" << dendl;
        temp = false;
        it->upper_bound(start_key);
-       pend = end_key;
+        if (end.hobj.is_max())
+          pend = end_key;
+        else
+          get_object_key(cct, end, &pend);
        dout(30) << __func__ << " pend " << pretty_binary_string(pend) << dendl;
        continue;
       }
+      if (it->valid() && it->key() < end_key) {
+        int r = get_key_object(it->key(), pnext);
+        ceph_assert(r == 0);
+        set_next = true;
+      }
       break;
     }
     dout(20) << __func__ << " key " << pretty_binary_string(it->key()) << dendl;