From b945de141f3a97efd339ee82f1ccd2caeae3a40f Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 17 Jun 2019 09:53:02 -0500 Subject: [PATCH] mon/OSDMonitor: only update removed_snaps when pre-octopus Signed-off-by: Sage Weil --- src/mon/OSDMonitor.cc | 8 +++++--- src/osd/osd_types.cc | 29 +++++++++++++++++------------ src/osd/osd_types.h | 4 ++-- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 45376973d8878..675c756d18a0d 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 f0c17cd8ce2c0..5f3c51705959f 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 3c7993310ba79..12042f2a400b0 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; -- 2.39.5