]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: fix repair_object when missing on primary 1658/head
authorSage Weil <sage@inktank.com>
Fri, 11 Apr 2014 22:39:23 +0000 (15:39 -0700)
committerSage Weil <sage@inktank.com>
Fri, 11 Apr 2014 22:39:23 +0000 (15:39 -0700)
If the object is missing on the primary, we need to fully populate the
missing_loc.needs_recovery_map.  This broke with the recent refactoring of
recovery for EC, somewhere around 84e2f39c557c79e9ca7c3c3f0eb0bfa4860bf899.

Fixes: #8008
Signed-off-by: Sage Weil <sage@inktank.com>
src/osd/PG.cc
src/osd/PG.h

index ae9732c5631683478075059ef908d154528e816d..5a79ab98ba95eb6e33ac6e047e3f1d0d917043a6 100644 (file)
@@ -3449,6 +3449,7 @@ void PG::repair_object(
     assert(waiting_for_unreadable_object.empty());
 
     pg_log.missing_add(soid, oi.version, eversion_t());
+    missing_loc.add_missing(soid, oi.version, eversion_t());
     missing_loc.add_location(soid, ok_peer);
 
     pg_log.set_last_requested(0);
index 6ca554f5af59d1c26d0a77cff010e8209dd1c700..58585dfe12cac51b88b77376cb8a960afd43924b 100644 (file)
@@ -379,6 +379,10 @@ public:
        }
       }
     }
+
+    void add_missing(const hobject_t &hoid, eversion_t need, eversion_t have) {
+      needs_recovery_map[hoid] = pg_missing_t::item(need, have);
+    }
     void revise_need(const hobject_t &hoid, eversion_t need) {
       assert(needs_recovery(hoid));
       needs_recovery_map[hoid].need = need;