]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: don't list snapshots in Group::snap_get_mirror_namespace()
authorVinayBhaskar-V <vvarada@redhat.com>
Fri, 11 Apr 2025 08:46:44 +0000 (10:46 +0200)
committerPrasanna Kumar Kalever <prasanna.kalever@redhat.com>
Thu, 24 Apr 2025 15:56:39 +0000 (21:26 +0530)
It's redundant -- GroupSnapshot struct can be fetched based on the
passed group snap ID directly.

Signed-off-by: VinayBhaskar-V <vvarada@redhat.com>
src/librbd/api/Group.cc

index 42187a8f9c2634ced22b2b58966d7016461e607b..cf2b5363fc6279489c19edc8d2795ff78339fefa 100644 (file)
@@ -1304,25 +1304,19 @@ int Group<I>::snap_get_mirror_namespace(
     return r;
   }
 
-  std::vector<cls::rbd::GroupSnapshot> cls_group_snaps;
-  r = group_snap_list<I>(group_ioctx, group_id, false, false, &cls_group_snaps);
+  auto group_header_oid = librbd::util::group_header_name(group_id);
+
+  cls::rbd::GroupSnapshot group_snap;
+  r = cls_client::group_snap_get_by_id(&group_ioctx, group_header_oid, snap_id,
+                                       &group_snap);
   if (r < 0) {
+    lderr(cct) << "failed to retrieve group snapshot: " << cpp_strerror(r)
+                << dendl;
     return r;
   }
 
-  const cls::rbd::GroupSnapshot *cls_group_snap_ptr = nullptr;
-  for (const auto& cls_group_snap : cls_group_snaps) {
-    if (cls_group_snap.id == snap_id) {
-      cls_group_snap_ptr = &cls_group_snap;
-      break;
-    }
-  }
-  if (cls_group_snap_ptr == nullptr) {
-    return -ENOENT;
-  }
-
   GetGroupMirrorVisitor visitor(mirror_namespace);
-  r = cls_group_snap_ptr->snapshot_namespace.visit(visitor);
+  r = group_snap.snapshot_namespace.visit(visitor);
   if (r < 0) {
     return r;
   }