+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:nil -*-
+// vim: ts=8 sw=2 smarttab expandtab
+
#include "crimson/osd/object_metadata_helper.h"
namespace {
subsets_t subsets;
logger().debug("{}: {} clone_overlap {} ",
__func__, soid, snapset.clone_overlap);
-
+ assert(missing.get_items().contains(soid));
+ const pg_missing_item &missing_item = missing.get_items().at(soid);
+ auto dirty_regions = missing_item.clean_regions.get_dirty_regions();
+ if (dirty_regions.empty()) {
+ logger().debug(
+ "{} {} not touched, no need to recover, skipping",
+ __func__,
+ soid);
+ return subsets;
+ }
uint64_t size = snapset.clone_size[soid.snap];
if (size) {
subsets.data_subset.insert(0, size);
}
+ // let data_subset store only the modified content of the object.
+ subsets.data_subset.intersection_of(dirty_regions);
+ logger().debug("{} {} data_subset {}",
+ __func__, soid, subsets.data_subset);
+
// TODO: make sure CEPH_FEATURE_OSD_CACHEPOOL is not supported in Crimson
// Skips clone subsets if caching was enabled (allow_incomplete_clones).
subsets.data_subset.insert(0, obj_size);
}
assert(missing.get_items().contains(head));
- const pg_missing_item missing_item = missing.get_items().at(head);
+ const pg_missing_item &missing_item = missing.get_items().at(head);
// let data_subset store only the modified content of the object.
subsets.data_subset.intersection_of(missing_item.clean_regions.get_dirty_regions());
logger().debug("{} {} data_subset {}",
ss.clones.push_back(snapid_t(2));
pg_missing_t missing;
pg_missing_item item;
+ item.clean_regions.mark_fully_dirty();
missing.add(clone, std::move(item));
hobject_t last_backfill{object_t{"foo1"}, "foo1", CEPH_NOSNAP, 42, 0, "nspace"};