From: Sage Weil Date: Mon, 17 Jun 2019 14:53:02 +0000 (-0500) Subject: mon/OSDMonitor: only update removed_snaps when pre-octopus X-Git-Tag: v15.1.0~2308^2~47 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b945de141f3a97efd339ee82f1ccd2caeae3a40f;p=ceph.git mon/OSDMonitor: only update removed_snaps when pre-octopus Signed-off-by: Sage Weil --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 45376973d887..675c756d18a0 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -12802,8 +12802,8 @@ bool OSDMonitor::prepare_pool_op(MonOpRequestRef op) 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; } @@ -12815,7 +12815,9 @@ bool OSDMonitor::prepare_pool_op(MonOpRequestRef op) _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; } diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index f0c17cd8ce2c..5f3c51705959 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -1548,18 +1548,21 @@ void pg_pool_t::add_snap(const char *n, utime_t stamp) 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) @@ -1569,14 +1572,16 @@ 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()); + } } } diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 3c7993310ba7..12042f2a400b 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -1711,9 +1711,9 @@ public: 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;