]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: Fixes for mark_unfound_lost
authorDavid Zafman <dzafman@redhat.com>
Thu, 19 Oct 2017 01:07:41 +0000 (18:07 -0700)
committerNathan Cutler <ncutler@suse.com>
Sun, 28 Jan 2018 22:45:29 +0000 (23:45 +0100)
Let recovery requeue operations and release backoff
For "delete" mark object context, if present, to non-existent

Signed-off-by: David Zafman <dzafman@redhat.com>
(cherry picked from commit 0c106f1a46815bb769e7a503b1adb265480b6779)

src/osd/PrimaryLogPG.cc

index 7f081b89623a6c6305f26b48764638baca97bd43..7a70ad3e51206ce84a68e791f2e6384990c5956e 100644 (file)
@@ -10786,6 +10786,13 @@ void PrimaryLogPG::mark_all_unfound_lost(
        log_entries.push_back(e);
         oids.push_back(oid);
 
+       // If context found mark object as deleted in case
+       // of racing with new creation.  This can happen if
+       // object lost and EIO at primary.
+       obc = object_contexts.lookup(oid);
+       if (obc)
+         obc->obs.exists = false;
+
        ++v.version;
        ++m;
       }
@@ -10812,10 +10819,6 @@ void PrimaryLogPG::mark_all_unfound_lost(
          }
        }
 
-       for (auto& p : waiting_for_unreadable_object) {
-         release_backoffs(p.first);
-       }
-       requeue_object_waiters(waiting_for_unreadable_object);
        if (is_recovery_unfound()) {
          queue_peering_event(
            CephPeeringEvtRef(