]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: drop data aliases from SnapTrimObjSubEvent::adjust_snaps()
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Sat, 10 Dec 2022 22:03:11 +0000 (22:03 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 28 Feb 2023 16:22:05 +0000 (16:22 +0000)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/osd/osd_operations/snaptrim_event.cc
src/crimson/osd/osd_operations/snaptrim_event.h

index 385de0b33709128f63638c781b6671b2b3580c4f..0620beb46f12be81c11e02ac3039473fa8a5fb64 100644 (file)
@@ -281,6 +281,43 @@ SnapTrimObjSubEvent::remove_clone(
   return OpsExecuter::snap_map_remove(coid, pg->snap_mapper, pg->osdriver, txn);
 }
 
+SnapTrimObjSubEvent::interruptible_future<>
+SnapTrimObjSubEvent::adjust_snaps(
+  ObjectContextRef obc,
+  const std::set<snapid_t>& new_snaps,
+  ceph::os::Transaction& txn,
+  std::vector<pg_log_entry_t>& log_entries
+) {
+  obc->ssc->snapset.clone_snaps[coid.snap] =
+    std::vector<snapid_t>(new_snaps.rbegin(), new_snaps.rend());
+  // we still do a 'modify' event on this object just to trigger a
+  // snapmapper.update ... :(
+  obc->obs.oi.prior_version = obc->obs.oi.version;
+  obc->obs.oi.version = osd_op_p.at_version;
+  ceph::bufferlist bl;
+  encode(obc->obs.oi,
+    bl,
+    pg->get_osdmap()->get_features(CEPH_ENTITY_TYPE_OSD, nullptr));
+  txn.setattr(
+    pg->get_collection_ref()->get_cid(),
+    ghobject_t{coid, ghobject_t::NO_GEN, shard_id_t::NO_SHARD},
+    OI_ATTR,
+    bl);
+  log_entries.emplace_back(
+    pg_log_entry_t{
+      pg_log_entry_t::MODIFY,
+      coid,
+      obc->obs.oi.version,
+      obc->obs.oi.prior_version,
+      0,
+      osd_reqid_t(),
+      obc->obs.oi.mtime,
+      0}
+    );
+  return OpsExecuter::snap_map_modify(
+    coid, new_snaps, pg->snap_mapper, pg->osdriver, txn);
+}
+
 SnapTrimObjSubEvent::interruptible_future<
   SnapTrimObjSubEvent::remove_or_update_ret_t>
 SnapTrimObjSubEvent::remove_or_update(
@@ -326,32 +363,7 @@ SnapTrimObjSubEvent::remove_or_update(
     // save adjusted snaps for this object
     logger().info("{}: {} snaps {} -> {}",
                   *this, coid, old_snaps, new_snaps);
-    obc->ssc->snapset.clone_snaps[coid.snap] =
-      std::vector<snapid_t>(new_snaps.rbegin(), new_snaps.rend());
-    // we still do a 'modify' event on this object just to trigger a
-    // snapmapper.update ... :(
-
-    obc->obs.oi.prior_version = obc->obs.oi.version;
-    obc->obs.oi.version = osd_op_p.at_version;
-    ceph::bufferlist bl;
-    encode(obc->obs.oi, bl, pg->get_osdmap()->get_features(CEPH_ENTITY_TYPE_OSD, nullptr));
-    txn.setattr(
-      pg->get_collection_ref()->get_cid(),
-      ghobject_t{coid, ghobject_t::NO_GEN, shard_id_t::NO_SHARD},
-      OI_ATTR,
-      bl);
-    log_entries.emplace_back(
-      pg_log_entry_t{
-       pg_log_entry_t::MODIFY,
-       coid,
-       obc->obs.oi.version,
-       obc->obs.oi.prior_version,
-       0,
-       osd_reqid_t(),
-       obc->obs.oi.mtime,
-       0}
-      );
-    ret = OpsExecuter::snap_map_modify(coid, new_snaps, pg->snap_mapper, pg->osdriver, txn);
+    ret = adjust_snaps(obc, new_snaps, txn, log_entries);
   }
   return std::move(ret).then_interruptible(
     [&txn, obc, num_objects_before_trim, log_entries=std::move(log_entries), head_obc=std::move(head_obc), this]() mutable {
index 5d4a050edb61413710b2fb109bef471e7e64bc01..b2c57f7d0f92dfa3b1da481ab3695ca8deb1aad0 100644 (file)
@@ -133,6 +133,11 @@ private:
     ObjectContextRef obc,
     ceph::os::Transaction& txn,
     std::vector<pg_log_entry_t>& log_entries);
+  interruptible_future<> adjust_snaps(
+    ObjectContextRef obc,
+    const std::set<snapid_t>& new_snaps,
+    ceph::os::Transaction& txn,
+    std::vector<pg_log_entry_t>& log_entries);
 
   using remove_or_update_ret_t =
     std::pair<ceph::os::Transaction, std::vector<pg_log_entry_t>>;