// ===========================================================
-void ReplicatedPG::calc_head_subsets(SnapSet& snapset, const hobject_t& head,
+void ReplicatedPG::calc_head_subsets(ObjectContext *obc, SnapSet& snapset, const hobject_t& head,
Missing& missing,
const hobject_t &last_backfill,
interval_set<uint64_t>& data_subset,
dout(10) << "calc_head_subsets " << head
<< " clone_overlap " << snapset.clone_overlap << dendl;
- struct stat st;
- osd->store->stat(coll, head, &st);
+ uint64_t size = obc->obs.oi.size;
+ if (size)
+ data_subset.insert(0, size);
+
interval_set<uint64_t> cloning;
interval_set<uint64_t> prev;
- if (st.st_size)
- prev.insert(0, st.st_size);
+ if (size)
+ prev.insert(0, size);
for (int j=snapset.clones.size()-1; j>=0; j--) {
hobject_t c = head;
}
// what's left for us to push?
- if (st.st_size)
- data_subset.insert(0, st.st_size);
data_subset.subtract(cloning);
dout(10) << "calc_head_subsets " << head
// base this on partially on replica's clones?
SnapSetContext *ssc = get_snapset_context(soid.oid, soid.get_key(), soid.hash, false);
dout(15) << "push_to_replica snapset is " << ssc->snapset << dendl;
- calc_head_subsets(ssc->snapset, soid, peer_missing[peer],
+ calc_head_subsets(obc, ssc->snapset, soid, peer_missing[peer],
peer_info[peer].last_backfill,
data_subset, clone_subsets);
put_snapset_context(ssc);
map<hobject_t, map<int, push_info_t> > pushing;
int recover_object_replicas(const hobject_t& soid, eversion_t v);
- void calc_head_subsets(SnapSet& snapset, const hobject_t& head,
+ void calc_head_subsets(ObjectContext *obc, SnapSet& snapset, const hobject_t& head,
Missing& missing,
const hobject_t &last_backfill,
interval_set<uint64_t>& data_subset,