If the snaps vector is: 10=[9,5,2]:[4]+head, the backing pool's snaps
vector is 3=[2]:[]+head, and we request clone 4 from the backing pool,
the backing pool will send us head with an empty results->snaps vector.
Actually, clone 4 should be trimmed, but the cache pool does not know
that. Thus, we should construct an empty snaps vector for that clone.
PartialFix: #11296
Backport: firefly, hammer
Signed-off-by: Samuel Just <sjust@redhat.com>
vector<snapid_t>::iterator p = snapset.snaps.begin();
while (p != snapset.snaps.end() && *p > soid.snap)
++p;
- assert(p != snapset.snaps.end());
- do {
+ while (p != snapset.snaps.end() && *p > results->snap_seq) {
tctx->new_obs.oi.snaps.push_back(*p);
++p;
- } while (p != snapset.snaps.end() && *p > results->snap_seq);
+ }
}
dout(20) << __func__ << " snaps " << tctx->new_obs.oi.snaps << dendl;
assert(!tctx->new_obs.oi.snaps.empty());