fully_loaded = true;
}
+ void set_clone_ssc(SnapSetContextRef head_ssc) {
+ ceph_assert(!is_head());
+ ssc = head_ssc;
+ }
+
/// pass the provided exception to any waiting consumers of this ObjectContext
template<typename Exception>
void interrupt(Exception ex) {
auto loaded = get_or_load_obc<State>(clone, existed);
return loaded.safe_then_interruptible(
[func = std::move(func), head=std::move(head)](auto clone) mutable {
+ clone->set_clone_ssc(head->ssc);
return std::move(func)(std::move(head), std::move(clone));
});
});
auto loaded = get_or_load_obc<State>(clone, existed);
return loaded.safe_then_interruptible(
[func = std::move(func), head=std::move(head)](auto clone) {
+ clone->set_clone_ssc(head->ssc);
return std::move(func)(std::move(head), std::move(clone));
});
});
obc->set_head_state(std::move(md->os),
std::move(md->ssc));
} else {
+ // we load and set the ssc only for head obc.
+ // For clones, the head's ssc will be referenced later.
+ // See set_clone_ssc
obc->set_clone_state(std::move(md->os));
}
DEBUGDPP("returning obc {} for {}", dpp, obc->obs.oi, obc->obs.oi.soid);