]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/pg: filter out snapmapper objects when doing pgls/pgnls 52267/head
authorXuehan Xu <xuxuehan@qianxin.com>
Wed, 21 Feb 2024 06:37:13 +0000 (14:37 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Wed, 21 Feb 2024 10:01:26 +0000 (18:01 +0800)
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/osd/ops_executer.cc

index f03827b03d6b4556a2f29ec24993ae3c051bd690..7d6f11145316532673617e957cf1eca4eed22182 100644 (file)
@@ -1166,6 +1166,10 @@ static PG::interruptible_future<hobject_t> pgls_filter(
   }
 }
 
+static inline bool is_snapmapper_oid(const hobject_t &obj) {
+  return obj.oid.name == SNAPMAPPER_OID;
+}
+
 static PG::interruptible_future<ceph::bufferlist> do_pgnls_common(
   const hobject_t& pg_start,
   const hobject_t& pg_end,
@@ -1186,6 +1190,13 @@ static PG::interruptible_future<ceph::bufferlist> do_pgnls_common(
     [&backend, filter, nspace](auto&& ret)
     -> PG::interruptible_future<std::tuple<std::vector<hobject_t>, hobject_t>> {
       auto& [objects, next] = ret;
+      auto is_snapmapper = [](const hobject_t &obj) {
+       if (is_snapmapper_oid(obj)) {
+         return false;
+       } else {
+         return true;
+       }
+      };
       auto in_my_namespace = [&nspace](const hobject_t& obj) {
         using crimson::common::local_conf;
         if (obj.get_namespace() == local_conf()->osd_hit_set_namespace) {
@@ -1213,7 +1224,8 @@ static PG::interruptible_future<ceph::bufferlist> do_pgnls_common(
         }
       };
 
-      auto range = objects | boost::adaptors::filtered(in_my_namespace)
+      auto range = objects | boost::adaptors::filtered(is_snapmapper)
+                          | boost::adaptors::filtered(in_my_namespace)
                            | boost::adaptors::transformed(to_pglsed);
       logger().debug("do_pgnls_common: finishing the 1st stage of pgls");
       return seastar::when_all_succeed(std::begin(range),
@@ -1346,6 +1358,9 @@ static PG::interruptible_future<ceph::bufferlist> do_pgls_common(
         PG::interruptor::map_reduce(std::move(objects),
           [&backend, filter, nspace](const hobject_t& obj)
          -> PG::interruptible_future<hobject_t>{
+           if (is_snapmapper_oid(obj)) {
+             return seastar::make_ready_future<hobject_t>();
+           }
             if (obj.get_namespace() == nspace) {
               if (filter) {
                 return pgls_filter(*filter, backend, obj);