// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
+#include <ranges>
+
#include "crimson/osd/osd_operations/snaptrim_event.h"
#include "crimson/osd/pg.h"
namespace crimson::osd {
+void SnapTrimEvent::SubOpBlocker::dump_detail(Formatter *f) const
+{
+ f->open_array_section("dependent_operations");
+ {
+ for (const auto &i : subops | std::views::keys) {
+ f->dump_unsigned("op_id", i);
+ }
+ }
+ f->close_section();
+}
+
+template <class... Args>
+void SnapTrimEvent::SubOpBlocker::emplace_back(Args&&... args)
+{
+ subops.emplace_back(std::forward<Args>(args)...);
+};
+
+seastar::future<> SnapTrimEvent::SubOpBlocker::wait_completion()
+{
+ auto rng = subops | std::views::values;
+ return seastar::when_all_succeed(
+ std::begin(rng), std::end(rng)
+ ).then([] (auto&&...) {
+ return seastar::now();
+ });
+}
+
void SnapTrimEvent::print(std::ostream &lhs) const
{
lhs << "SnapTrimEvent("
private:
CommonPGPipeline& pp();
+ // bases on 998cb8c141bb89aafae298a9d5e130fbd78fe5f2
+ struct SubOpBlocker : crimson::BlockerT<SubOpBlocker> {
+ static constexpr const char* type_name = "CompoundOpBlocker";
+
+ using id_done_t = std::pair<crimson::Operation::id_t, seastar::future<>>;
+
+ void dump_detail(Formatter *f) const final;
+
+ template <class... Args>
+ void emplace_back(Args&&... args);
+
+ seastar::future<> wait_completion();
+ private:
+ std::vector<id_done_t> subops;
+ } subop_blocker;
PipelineHandle handle;
Ref<PG> pg;
const snapid_t snapid;