dsnapc.snaps will be non-empty most of the time if there
have been snaps before prev_snapc. What we really want to
know is whether there are any snaps between oi.snaps.back()
and prev_snapc.
Fixes: 8334
Backport: firefly
Signed-off-by: Samuel Just <sam.just@inktank.com>
(cherry picked from commit
29f615b7ac9e92f77cdef9927070727fee9d5e33)
++p;
snapc.snaps = vector<snapid_t>(p, snapset.snaps.end());
+ while (p != snapset.snaps.end() && *p >= oi.snaps.back())
+ ++p;
+ vector<snapid_t>::iterator dnewest = p;
+
// we may need to send a delete first
while (p != snapset.snaps.end() && *p > prev_snapc)
++p;
dsnapc.snaps = vector<snapid_t>(p, snapset.snaps.end());
- if (dsnapc.snaps.empty()) {
+ if (p == dnewest) {
+ // no snaps between the oldest in this clone and prev_snapc
snapc.seq = prev_snapc;
} else {
+ // snaps between oldest in this clone and prev_snapc, send delete
dsnapc.seq = prev_snapc;
snapc.seq = oi.snaps.back() - 1;
}