]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/ops_executer: LIST_SNAPS only on CEPH_SNAPDIR 58030/head
authorjunxiang Mu <1948535941@qq.com>
Mon, 20 May 2024 10:00:53 +0000 (06:00 -0400)
committerMatan Breizman <mbreizma@redhat.com>
Thu, 13 Jun 2024 12:42:36 +0000 (15:42 +0300)
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
src/crimson/osd/ops_executer.h
src/crimson/osd/pg.h
src/test/librados/snapshots_cxx.cc

index 10020e9adf8a1e32f0c37f9a4c7891f3a2828d63..a0fbb0ea0cc736a55640da3dbf9a2d1a902da74b 100644 (file)
@@ -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) {
index 60b5c20aecddac967d11406e4ccdeca99022c36f..4bdc66c6a01210990fda560c9ed23eac519b18f5 100644 (file)
@@ -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 <class ImplT>
@@ -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
index d705a71bb785d1f4051895cf8288779dabddf25d..cdfdb53735e64ab5beb467065b32088b91a83ab4 100644 (file)
@@ -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);
index 3338b62056ea9c05909372fc64b4d4c8d1b3c47f..ab6ecdfbf014c77846bc85479150f616e1178046 100644 (file)
@@ -153,7 +153,6 @@ TEST_F(LibRadosSnapshotsSelfManagedPP, SnapPP) {
 }
 
 TEST_F(LibRadosSnapshotsSelfManagedPP, RollbackPP) {
-  SKIP_IF_CRIMSON();
   std::vector<uint64_t> my_snaps;
   IoCtx readioctx;
   ASSERT_EQ(0, cluster.ioctx_create(pool_name.c_str(), readioctx));