From bd3223f9e069f22fa5f126dbfbd3781e7d21e310 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Fri, 28 Oct 2011 14:18:12 -0700 Subject: [PATCH] PG: Create new snap directories independently on replica Previously, we shipped over the collection creation as part of the transaction. However, the snap directory on the replica might or might not exist already due to recovery progress. Signed-off-by: Samuel Just --- src/osd/PG.cc | 12 +++++------- src/osd/PG.h | 3 ++- src/osd/ReplicatedPG.cc | 8 ++++---- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 70200e9b4a7a9..32fe199e216a5 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -2414,7 +2414,8 @@ coll_t PG::make_snap_collection(ObjectStore::Transaction& t, snapid_t s) return c; } -void PG::update_snap_collections(vector &log_entries) +void PG::update_snap_collections(vector &log_entries, + ObjectStore::Transaction &t) { for (vector::iterator i = log_entries.begin(); i != log_entries.end(); @@ -2423,12 +2424,9 @@ void PG::update_snap_collections(vector &log_entries) vector snaps; bufferlist::iterator p = i->snaps.begin(); ::decode(snaps, p); - if (!snap_collections.contains(*snaps.begin())) { - snap_collections.insert(*snaps.begin()); - } - if (snaps.size() > 1 && !snap_collections.contains(*(snaps.end() - 1))) { - snap_collections.insert(*(snaps.end() - 1)); - } + make_snap_collection(t, snaps[0]); + if (snaps.size() > 1) + make_snap_collection(t, *(snaps.rbegin())); } } } diff --git a/src/osd/PG.h b/src/osd/PG.h index 95791697a6679..38b230b6f244d 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -1620,7 +1620,8 @@ public: std::string get_corrupt_pg_log_name() const; void read_state(ObjectStore *store); coll_t make_snap_collection(ObjectStore::Transaction& t, snapid_t sn); - void update_snap_collections(vector &log_entries); + void update_snap_collections(vector &log_entries, + ObjectStore::Transaction& t); void adjust_local_snaps(); void log_weirdness(); diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 6255a31bf6f1e..77bcf4889195e 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -2268,10 +2268,10 @@ void ReplicatedPG::make_writeable(OpContext *ctx) _make_clone(t, soid, coid, snap_oi); // add to snap bound collections - coll_t fc = make_snap_collection(t, snaps[0]); + coll_t fc = make_snap_collection(ctx->local_t, snaps[0]); t.collection_add(fc, coll, coid); if (snaps.size() > 1) { - coll_t lc = make_snap_collection(t, snaps[snaps.size()-1]); + coll_t lc = make_snap_collection(ctx->local_t, snaps[snaps.size()-1]); t.collection_add(lc, coll, coid); } @@ -3382,11 +3382,11 @@ void ReplicatedPG::sub_op_modify(MOSDSubOp *op) ::decode(log, p); info.stats = op->pg_stats; - update_snap_collections(log); + update_snap_collections(log, rm->localt); append_log(log, op->pg_trim_to, rm->localt); - rm->tls.push_back(&rm->opt); rm->tls.push_back(&rm->localt); + rm->tls.push_back(&rm->opt); } else { // do op -- 2.39.5