From: Sage Weil Date: Tue, 9 Dec 2008 19:47:06 +0000 (-0800) Subject: osd: use push() to push clone op X-Git-Tag: v0.6~137 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8a5f231720575016913e21736011e4bd29e7993f;p=ceph.git osd: use push() to push clone op Also fixes missing updates to peer_missing[peer] and pushing map. --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index b3df47d4153cf..a0be8b69121aa 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -2065,21 +2065,10 @@ void ReplicatedPG::push_to_replica(pobject_t poid, int peer) dout(10) << "push_to_replica osd" << peer << " has correct old " << head << " v" << from_version << ", pushing " << poid << " attrs as a clone op" << dendl; - // get attrs - map attrset; - int r = osd->store->getattrs(info.pgid.to_coll(), poid, attrset); - assert(r >= 0); - - osd_reqid_t rid; // useless? - vector push(1); - push[0].op = CEPH_OSD_OP_PUSH; - push[0].offset = 0; - push[0].length = st.st_size; - MOSDSubOp *subop = new MOSDSubOp(rid, info.pgid, poid, push, false, 0, - osd->osdmap->get_epoch(), osd->get_tid(), 0, version); - subop->clone_subsets[head].insert(0, st.st_size); - subop->attrset.swap(attrset); - osd->messenger->send_message(subop, osd->osdmap->get_inst(peer)); + interval_set<__u64> data_subset; + map > clone_subsets; + clone_subsets[head].insert(0, st.st_size); + push(poid, peer, data_subset, clone_subsets); return; } @@ -2139,7 +2128,7 @@ void ReplicatedPG::push(pobject_t poid, int peer, map attrset; __u64 size; - if (data_subset.size()) { + if (data_subset.size() || clone_subsets.size()) { struct stat st; int r = osd->store->stat(info.pgid.to_coll(), poid, &st); assert(r == 0);