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 <sjust@redhat.com>
This commit is contained in:
Samuel Just 2015-09-17 16:49:53 -07:00
parent b615f35a04
commit 7b2fa67a93

View File

@ -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);