]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
PGLog::_merge_object_divergent_entries: handle missing.have == prior_version
authorSamuel Just <sam.just@inktank.com>
Sat, 8 Mar 2014 00:50:40 +0000 (16:50 -0800)
committerSamuel Just <sam.just@inktank.com>
Sat, 8 Mar 2014 00:53:51 +0000 (16:53 -0800)
Fixes: #7658
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/PGLog.cc

index beb2f0d905a12769a6eb8c8d969f21714274326a..a468dcb4470e3a8c8dc18caa96ed0626e663232a 100644 (file)
@@ -348,14 +348,26 @@ void PGLog::_merge_object_divergent_entries(
   if (missing.is_missing(hoid)) {
     /// Case 3)
     dout(10) << __func__ << ": hoid " << hoid
-            << " missing, adjusting missing version" << dendl;
-    missing.revise_need(hoid, prior_version);
-    if (prior_version <= info.log_tail) {
+            << " missing, " << missing.missing[hoid]
+            << " adjusting" << dendl;
+
+    if (missing.missing[hoid].have == prior_version) {
       dout(10) << __func__ << ": hoid " << hoid
-              << " prior_version " << prior_version << " <= info.log_tail "
-              << info.log_tail << dendl;
-      if (new_divergent_prior)
-       *new_divergent_prior = make_pair(prior_version, hoid);
+              << " missing.have is prior_version " << prior_version
+              << " removing from missing" << dendl;
+      missing.rm(missing.missing.find(hoid));
+    } else {
+      dout(10) << __func__ << ": hoid " << hoid
+              << " missing.have is " << missing.missing[hoid].have
+              << ", adjusting" << dendl;
+      missing.revise_need(hoid, prior_version);
+      if (prior_version <= info.log_tail) {
+       dout(10) << __func__ << ": hoid " << hoid
+                << " prior_version " << prior_version << " <= info.log_tail "
+                << info.log_tail << dendl;
+       if (new_divergent_prior)
+         *new_divergent_prior = make_pair(prior_version, hoid);
+      }
     }
     return;
   }