case POOL_OP_CREATE_UNMANAGED_SNAP:
{
- uint64_t snapid;
- pp.add_unmanaged_snap(snapid);
+ uint64_t snapid = pp.add_unmanaged_snap(
+ osdmap.require_osd_release < ceph_release_t::octopus);
encode(snapid, reply_data);
changed = true;
}
_pool_op_reply(op, -ENOENT, osdmap.get_epoch());
return false;
}
- pp.remove_unmanaged_snap(m->snapid);
+ pp.remove_unmanaged_snap(
+ m->snapid,
+ osdmap.require_osd_release < ceph_release_t::octopus);
pending_inc.new_removed_snaps[m->pool].insert(m->snapid);
changed = true;
}
snaps[s].stamp = stamp;
}
-void pg_pool_t::add_unmanaged_snap(uint64_t& snapid)
+uint64_t pg_pool_t::add_unmanaged_snap(bool preoctopus_compat)
{
ceph_assert(!is_pool_snaps_mode());
if (snap_seq == 0) {
- // kludge for pre-mimic tracking of pool vs selfmanaged snaps. after
- // mimic this field is not decoded but our flag is set; pre-mimic, we
- // have a non-empty removed_snaps to signifiy a non-pool-snaps pool.
- removed_snaps.insert(snapid_t(1));
+ if (preoctopus_compat) {
+ // kludge for pre-mimic tracking of pool vs selfmanaged snaps. after
+ // mimic this field is not decoded but our flag is set; pre-mimic, we
+ // have a non-empty removed_snaps to signifiy a non-pool-snaps pool.
+ removed_snaps.insert(snapid_t(1));
+ }
snap_seq = 1;
}
flags |= FLAG_SELFMANAGED_SNAPS;
- snapid = snap_seq = snap_seq + 1;
+ snap_seq = snap_seq + 1;
+ return snap_seq;
}
void pg_pool_t::remove_snap(snapid_t s)
snap_seq = snap_seq + 1;
}
-void pg_pool_t::remove_unmanaged_snap(snapid_t s)
+void pg_pool_t::remove_unmanaged_snap(snapid_t s, bool preoctopus_compat)
{
ceph_assert(is_unmanaged_snaps_mode());
- removed_snaps.insert(s);
- snap_seq = snap_seq + 1;
- // try to add in the new seq, just to try to keep the interval_set contiguous
- if (!removed_snaps.contains(get_snap_seq())) {
- removed_snaps.insert(get_snap_seq());
+ ++snap_seq;
+ if (preoctopus_compat) {
+ removed_snaps.insert(s);
+ // try to add in the new seq, just to try to keep the interval_set contiguous
+ if (!removed_snaps.contains(get_snap_seq())) {
+ removed_snaps.insert(get_snap_seq());
+ }
}
}
snapid_t snap_exists(const char *s) const;
void add_snap(const char *n, utime_t stamp);
- void add_unmanaged_snap(uint64_t& snapid);
+ uint64_t add_unmanaged_snap(bool preoctopus_compat);
void remove_snap(snapid_t s);
- void remove_unmanaged_snap(snapid_t s);
+ void remove_unmanaged_snap(snapid_t s, bool preoctopus_compat);
SnapContext get_snap_context() const;