Fixes: http://tracker.ceph.com/issues/18162
Signed-off-by: David Zafman <dzafman@redhat.com>
(cherry picked from commit
6a02bfef3d44a13589c1a90bec29ff0ac64f97aa)
Conflicts:
src/osd/PGBackend.h (trivial)
src/osd/ReplicatedPG.cc (trivial)
src/osd/ReplicatedPG.h (trivial)
dout(10) << __func__ << ": canceling recovery op for obj " << hoid
<< dendl;
assert(recovery_ops.count(hoid));
+ eversion_t v = recovery_ops[hoid].v;
recovery_ops.erase(hoid);
list<pg_shard_t> fl;
fl.push_back(i.first);
}
get_parent()->failed_push(fl, hoid);
+ get_parent()->backfill_add_missing(hoid, v);
+ get_parent()->finish_degraded_object(hoid);
}
struct OnRecoveryReadComplete :
virtual void failed_push(const list<pg_shard_t> &from, const hobject_t &soid) = 0;
+ virtual void finish_degraded_object(const hobject_t& oid) = 0;
virtual void cancel_pull(const hobject_t &soid) = 0;
+ virtual void backfill_add_missing(
+ const hobject_t &oid,
+ eversion_t v
+ ) = 0;
+
/**
* Bless a context
*
osd->send_message_osd_cluster(m, con);
}
+void ReplicatedPG::backfill_add_missing(
+ const hobject_t &oid,
+ eversion_t v)
+{
+ dout(0) << __func__ << ": oid " << oid << " version " << v << dendl;
+ backfills_in_flight.erase(oid);
+ missing_loc.add_missing(oid, v, eversion_t());
+}
+
ConnectionRef ReplicatedPG::get_con_osd_cluster(
int peer, epoch_t from_epoch)
{
const object_stat_sum_t &stat_diff);
void failed_push(const list<pg_shard_t> &from, const hobject_t &soid) override;
void cancel_pull(const hobject_t &soid);
+ void backfill_add_missing(const hobject_t &oid, eversion_t v) override;
template <typename T>
class BlessedGenContext : public GenContext<T> {