return nullptr;
}
+seastar::future<> PG::clear_temp_objects()
+{
+ logger().info("{} {}", __func__, pgid);
+ ghobject_t _next;
+ ceph::os::Transaction t;
+ auto max_size = local_conf()->osd_target_transaction_size;
+ while(true) {
+ auto [objs, next] = co_await shard_services.get_store().list_objects(
+ coll_ref, _next, ghobject_t::get_max(), max_size);
+ if (objs.empty()) {
+ if (!t.empty()) {
+ co_await shard_services.get_store().do_transaction(
+ coll_ref, std::move(t));
+ }
+ break;
+ }
+ for (auto &obj : objs) {
+ if (obj.hobj.is_temp()) {
+ t.remove(coll_ref->get_cid(), obj);
+ }
+ }
+ _next = next;
+ if (t.get_num_ops() >= max_size) {
+ co_await shard_services.get_store().do_transaction(
+ coll_ref, t.claim_and_reset());
+ }
+ }
+}
+
PG::interruptible_future<seastar::stop_iteration> PG::trim_snap(
snapid_t to_trim,
bool needs_pause)
pgid
).then([pgid, &per_shard_state](auto &&pg) {
logger().info("load_pgs: loaded {}", pgid);
- per_shard_state.pg_map.pg_loaded(pgid, std::move(pg));
- return seastar::now();
+ return pg->clear_temp_objects(
+ ).then([&per_shard_state, pg, pgid] {
+ per_shard_state.pg_map.pg_loaded(pgid, std::move(pg));
+ });
});
});
});