Backport: bobtail
Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
// If past backfill line, snap_collections will be updated during push
if (i->soid > info.last_backfill)
continue;
- if (i->is_clone()) {
+ if (i->snaps.length() > 0) {
vector<snapid_t> snaps;
bufferlist::iterator p = i->snaps.begin();
- ::decode(snaps, p);
- make_snap_collection(t, snaps[0]);
- if (snaps.size() > 1)
- make_snap_collection(t, *(snaps.rbegin()));
+ try {
+ ::decode(snaps, p);
+ } catch (...) {
+ snaps.clear();
+ }
+ if (snaps.size()) {
+ make_snap_collection(t, snaps[0]);
+ if (snaps.size() > 1)
+ make_snap_collection(t, *(snaps.rbegin()));
+ }
}
}
}
ctx->log.push_back(pg_log_entry_t(pg_log_entry_t::MODIFY, coid, coi.version, coi.prior_version,
osd_reqid_t(), ctx->mtime));
- ::encode(coi, ctx->log.back().snaps);
+ ::encode(coi.snaps, ctx->log.back().snaps);
ctx->at_version.version++;
}