]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/cls/journal/cls_journal.cc
update sources to v12.2.3
[ceph.git] / ceph / src / cls / journal / cls_journal.cc
index 2f1d18d0d79c88a3caa383a915a2885e7d18e322..1bb3366199b844885b61f123cadc4f6f3796975a 100644 (file)
@@ -102,7 +102,7 @@ int expire_tags(cls_method_context_t hctx, const std::string *skip_client_id) {
   }
 
   uint64_t minimum_tag_tid = std::numeric_limits<uint64_t>::max();
-  std::string last_read = HEADER_KEY_CLIENT_PREFIX;
+  std::string last_read = "";
   bool more;
   do {
     std::map<std::string, bufferlist> vals;
@@ -130,6 +130,14 @@ int expire_tags(cls_method_context_t hctx, const std::string *skip_client_id) {
         return -EIO;
       }
 
+      if (client.state == cls::journal::CLIENT_STATE_DISCONNECTED) {
+        // don't allow a disconnected client to prevent pruning
+        continue;
+      } else if (client.commit_position.object_positions.empty()) {
+        // cannot prune if one or more clients has an empty commit history
+        return 0;
+      }
+
       for (auto object_position : client.commit_position.object_positions) {
         minimum_tag_tid = MIN(minimum_tag_tid, object_position.tag_tid);
       }