From 301d0c8fa86ade561b6f82c21e523b8a77d67d5b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 18 Aug 2008 17:32:12 -0700 Subject: [PATCH] osd: include pushed clones in proper snap collections --- src/osd/ReplicatedPG.cc | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 9d17391abfc52..2ee0bc6e84706 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1766,7 +1766,23 @@ void ReplicatedPG::sub_op_push(MOSDSubOp *op) t.remove(info.pgid.to_coll(), poid); // in case old version exists t.write(info.pgid.to_coll(), poid, 0, op->length, op->get_data()); t.setattrs(info.pgid.to_coll(), poid, op->attrset); - //t.collection_add(info.pgid.to_coll(), poid); + if (poid.oid.snap && poid.oid.snap != CEPH_NOSNAP && + op->attrset.count("snaps")) { + bufferlist bl; + bl.push_back(op->attrset["snaps"]); + vector snaps; + bufferlist::iterator p = bl.begin(); + ::decode(snaps, p); + if (snaps.size()) { + t.create_collection(info.pgid.to_snap_coll(snaps[0])); + t.collection_add(info.pgid.to_snap_coll(snaps[0]), info.pgid.to_coll(), poid); + if (snaps.size() > 1) { + t.create_collection(info.pgid.to_snap_coll(snaps[snaps.size()-1])); + t.collection_add(info.pgid.to_snap_coll(snaps[snaps.size()-1]), info.pgid.to_coll(), poid); + } + } + } + // close out pull op? if (pulling.count(poid.oid)) -- 2.39.5