}
}
-int PrimaryLogPG::get_manifest_ref_count(ObjectContextRef obc, std::string& fp_oid)
+int PrimaryLogPG::get_manifest_ref_count(ObjectContextRef obc, std::string& fp_oid, OpRequestRef op)
{
int cnt = 0;
// head
if (!clone_obc) {
break;
}
+ if (recover_adjacent_clones(obc, op)) {
+ return -EAGAIN;
+ }
get_adjacent_clones(clone_obc, obc_l, obc_g);
clone_obc->obs.oi.manifest.calc_refs_to_inc_on_set(
obc_g ? &(obc_g->obs.oi.manifest) : nullptr ,
if (!obc->obs.oi.manifest.is_chunked() || !obc->ssc || !obc->ssc->snapset.clones.size()) {
return false;
}
+ ceph_assert(op);
const SnapSet& snapset = obc->ssc->snapset;
auto s = std::find(snapset.clones.begin(), snapset.clones.end(), obc->obs.oi.soid.snap);
void maybe_kick_recovery(const hobject_t &soid);
void wait_for_unreadable_object(const hobject_t& oid, OpRequestRef op);
- int get_manifest_ref_count(ObjectContextRef obc, std::string& fp_oid);
+ int get_manifest_ref_count(ObjectContextRef obc, std::string& fp_oid, OpRequestRef op);
bool check_laggy(OpRequestRef& op);
bool check_laggy_requeue(OpRequestRef& op);
int cls_get_manifest_ref_count(cls_method_context_t hctx, string fp_oid)
{
PrimaryLogPG::OpContext *ctx = *(PrimaryLogPG::OpContext **)hctx;
- return ctx->pg->get_manifest_ref_count(ctx->obc, fp_oid);
+ return ctx->pg->get_manifest_ref_count(ctx->obc, fp_oid, ctx->op);
}
uint64_t cls_get_osd_min_alloc_size(cls_method_context_t hctx) {