const vector<pg_log_entry_t> &log_entries,
ObjectStore::Transaction &t)
{
- for (auto i = log_entries.cbegin(); i != log_entries.cend(); ++i) {
+ for (const auto& entry : log_entries) {
OSDriver::OSTransaction _t(osdriver.get_transaction(&t));
- if (i->soid.snap < CEPH_MAXSNAP) {
- if (i->is_delete()) {
- int r = snap_mapper.remove_oid(
- i->soid,
- &_t);
- if (r)
- derr << __func__ << " remove_oid " << i->soid << " failed with " << r << dendl;
- // On removal tolerate missing key corruption
- ceph_assert(r == 0 || r == -ENOENT);
- } else if (i->is_update()) {
- ceph_assert(i->snaps.length() > 0);
- vector<snapid_t> snaps;
- bufferlist snapbl = i->snaps;
- auto p = snapbl.cbegin();
- try {
- decode(snaps, p);
- } catch (...) {
- derr << __func__ << " decode snaps failure on " << *i << dendl;
- snaps.clear();
- }
- set<snapid_t> _snaps(snaps.begin(), snaps.end());
-
- if (i->is_clone() || i->is_promote()) {
- snap_mapper.add_oid(
- i->soid,
- _snaps,
- &_t);
- } else if (i->is_modify()) {
- int r = snap_mapper.update_snaps(
- i->soid,
- _snaps,
- 0,
- &_t);
- ceph_assert(r == 0);
- } else {
- ceph_assert(i->is_clean());
- }
- }
+ if (entry.soid.snap < CEPH_MAXSNAP) {
+ snap_mapper.update_snap_map(entry, &_t);
}
}
}