From eab2bf2989bc1f83b41279d9e9d2ca180aee80f2 Mon Sep 17 00:00:00 2001 From: junxiang Mu <1948535941@qq.com> Date: Mon, 20 May 2024 06:00:53 -0400 Subject: [PATCH] crimson/osd/ops_executer: LIST_SNAPS only on CEPH_SNAPDIR fixes: https://tracker.ceph.com/issues/65663 Signed-off-by: junxiang Mu <1948535941@qq.com> (cherry picked from commit 2e7482ebcf19ae066e2d7c2d297d4f0d3250dc63) --- src/crimson/osd/ops_executer.cc | 5 +++++ src/crimson/osd/ops_executer.h | 4 ++++ src/crimson/osd/pg.h | 5 +++++ src/test/librados/snapshots_cxx.cc | 1 - 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/crimson/osd/ops_executer.cc b/src/crimson/osd/ops_executer.cc index 10020e9adf8..a0fbb0ea0cc 100644 --- a/src/crimson/osd/ops_executer.cc +++ b/src/crimson/osd/ops_executer.cc @@ -490,6 +490,11 @@ OpsExecuter::list_snaps_iertr::future<> OpsExecuter::do_list_snaps( const ObjectState& os, const SnapSet& ss) { + if (msg->get_snapid() != CEPH_SNAPDIR) { + logger().debug("LIST_SNAPS with incorrect context"); + return crimson::ct_error::invarg::make(); + } + obj_list_snap_response_t resp; resp.clones.reserve(ss.clones.size() + 1); for (auto &clone: ss.clones) { diff --git a/src/crimson/osd/ops_executer.h b/src/crimson/osd/ops_executer.h index 60b5c20aecd..4bdc66c6a01 100644 --- a/src/crimson/osd/ops_executer.h +++ b/src/crimson/osd/ops_executer.h @@ -107,6 +107,7 @@ public: virtual uint64_t get_features() const = 0; virtual bool has_flag(uint32_t flag) const = 0; virtual entity_name_t get_source() const = 0; + virtual snapid_t get_snapid() const = 0; }; template @@ -144,6 +145,9 @@ public: uint64_t get_features() const final { return pimpl->get_features(); } + snapid_t get_snapid() const final { + return pimpl->get_snapid(); + } }; // because OpsExecuter is pretty heavy-weight object we want to ensure diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index d705a71bb78..cdfdb53735e 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -831,12 +831,17 @@ struct PG::do_osd_ops_params_t { return orig_source_inst.name; } + snapid_t get_snapid() const { + return snapid; + } + crimson::net::ConnectionXcoreRef &conn; osd_reqid_t reqid; utime_t mtime; epoch_t map_epoch; entity_inst_t orig_source_inst; uint64_t features; + snapid_t snapid; }; std::ostream& operator<<(std::ostream&, const PG& pg); diff --git a/src/test/librados/snapshots_cxx.cc b/src/test/librados/snapshots_cxx.cc index 3338b62056e..ab6ecdfbf01 100644 --- a/src/test/librados/snapshots_cxx.cc +++ b/src/test/librados/snapshots_cxx.cc @@ -153,7 +153,6 @@ TEST_F(LibRadosSnapshotsSelfManagedPP, SnapPP) { } TEST_F(LibRadosSnapshotsSelfManagedPP, RollbackPP) { - SKIP_IF_CRIMSON(); std::vector my_snaps; IoCtx readioctx; ASSERT_EQ(0, cluster.ioctx_create(pool_name.c_str(), readioctx)); -- 2.39.5