From 7b2fa67a937687025ec870bda9185b16730ab9ad Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 17 Sep 2015 16:49:53 -0700 Subject: [PATCH] ReplicatedPG::get_snapset_context: set exists to false for new ssc with can_create Otherwise, if we do a proxy_write and don't promote it, the ssc will stick around with exists = true and cause future reads on snaps for the object to fail to fall through to the base tier. Fixes: #13150 Signed-off-by: Samuel Just --- src/osd/ReplicatedPG.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 52bb6deff9d..9e432b5237a 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -8447,7 +8447,7 @@ int ReplicatedPG::find_object_context(const hobject_t& oid, } SnapSetContext *ssc = get_snapset_context(oid, can_create); - if (!ssc || !(ssc->exists)) { + if (!ssc || !(ssc->exists || can_create)) { dout(20) << __func__ << " " << oid << " no snapset" << dendl; if (pmissing) *pmissing = head; // start by getting the head @@ -8695,7 +8695,6 @@ SnapSetContext *ReplicatedPG::get_snapset_context( if (p != snapset_contexts.end()) { if (can_create || p->second->exists) { ssc = p->second; - ssc->exists = true; } else { return NULL; } @@ -8718,6 +8717,9 @@ SnapSetContext *ReplicatedPG::get_snapset_context( if (bv.length()) { bufferlist::iterator bvp = bv.begin(); ssc->snapset.decode(bvp); + ssc->exists = true; + } else { + ssc->exists = false; } } assert(ssc);