]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PGLog: get rid of ineffective container operations 19161/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Fri, 24 Nov 2017 02:10:27 +0000 (10:10 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Sat, 2 Dec 2017 07:16:28 +0000 (15:16 +0800)
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/osd/PGLog.h
src/osd/osd_types.h

index 4e8e084a2ad312d2d4985632c4b3a604ba7be8ce..6edfd3891c7d37d24a15d588159f86f39fa23a56 100644 (file)
@@ -758,10 +758,9 @@ public:
        log.complete_to = log.log.end();
        info.last_complete = info.last_update;
       }
+      auto oldest_need = missing.get_oldest_need();
       while (log.complete_to != log.log.end()) {
-       if (missing.get_items().at(
-             missing.get_rmissing().begin()->second
-             ).need <= log.complete_to->version)
+       if (oldest_need <= log.complete_to->version)
          break;
        if (info.last_complete < log.complete_to->version)
          info.last_complete = log.complete_to->version;
@@ -774,12 +773,12 @@ public:
 
   void reset_complete_to(pg_info_t *info) {
     log.complete_to = log.log.begin();
-    while (!missing.get_items().empty() && log.complete_to->version <
-          missing.get_items().at(
-            missing.get_rmissing().begin()->second
-            ).need) {
-      assert(log.complete_to != log.log.end());
-      ++log.complete_to;
+    auto oldest_need = missing.get_oldest_need();
+    if (oldest_need != eversion_t()) {
+      while (log.complete_to->version < oldest_need) {
+        assert(log.complete_to != log.log.end());
+        ++log.complete_to;
+      }
     }
     assert(log.complete_to != log.log.end());
     if (log.complete_to == log.log.begin()) {
index 9dc35dc7cf3a01831b74e3c929a33184681a0ab7..94ac6328873e6210b9edd92a6a710c64263422d3 100644 (file)
@@ -3835,6 +3835,14 @@ public:
       return false;
     return true;
   }
+  eversion_t get_oldest_need() const {
+    if (missing.empty()) {
+      return eversion_t();
+    }
+    auto it = missing.find(rmissing.begin()->second);
+    assert(it != missing.end());
+    return it->second.need;
+  }
 
   void claim(pg_missing_set& o) {
     static_assert(!TrackChanges, "Can't use claim with TrackChanges");