Skip to content

Commit dcac099

Browse files
committed
crimson/osd/osd_operations/snaptrim_event: move SubOpBlocker to seperate file
Signed-off-by: Matan Breizman <[email protected]>
1 parent 1f478ca commit dcac099

File tree

3 files changed

+56
-42
lines changed

3 files changed

+56
-42
lines changed

src/crimson/common/subop_blocker.h

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2+
// vim: ts=8 sw=2 smarttab
3+
4+
#pragma once
5+
6+
#include "osd/osd_op_util.h"
7+
#include "crimson/osd/osd_operation.h"
8+
9+
namespace crimson::osd {
10+
11+
using interruptor =
12+
::crimson::interruptible::interruptor<
13+
::crimson::osd::IOInterruptCondition>;
14+
15+
// bases on 998cb8c141bb89aafae298a9d5e130fbd78fe5f2
16+
template <typename T>
17+
struct SubOpBlocker : crimson::BlockerT<SubOpBlocker<T>> {
18+
static constexpr const char* type_name = "CompoundOpBlocker";
19+
20+
using id_done_t = std::pair<crimson::OperationRef, T>;
21+
22+
void dump_detail(Formatter *f) const final {
23+
f->open_array_section("dependent_operations");
24+
{
25+
for (const auto &kv : subops) {
26+
f->dump_unsigned("op_id", kv.first->get_id());
27+
}
28+
}
29+
f->close_section();
30+
}
31+
32+
template <class... Args>
33+
void emplace_back(Args&&... args) {
34+
subops.emplace_back(std::forward<Args>(args)...);
35+
};
36+
37+
T interruptible_wait_completion() {
38+
return interruptor::do_for_each(subops, [](auto&& kv) {
39+
return std::move(kv.second);
40+
});
41+
}
42+
43+
T wait_completion() {
44+
return seastar::do_for_each(subops, [](auto&& kv) {
45+
return std::move(kv.second);
46+
});
47+
}
48+
49+
private:
50+
std::vector<id_done_t> subops;
51+
};
52+
53+
} // namespace crimson::osd

src/crimson/osd/osd_operations/snaptrim_event.cc

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -39,31 +39,6 @@ PG::BackgroundProcessLock::lock_with_op(SnapTrimEvent &st_event) noexcept
3939
});
4040
}
4141

42-
void SnapTrimEvent::SubOpBlocker::dump_detail(Formatter *f) const
43-
{
44-
f->open_array_section("dependent_operations");
45-
{
46-
for (const auto &kv : subops) {
47-
f->dump_unsigned("op_id", kv.first->get_id());
48-
}
49-
}
50-
f->close_section();
51-
}
52-
53-
template <class... Args>
54-
void SnapTrimEvent::SubOpBlocker::emplace_back(Args&&... args)
55-
{
56-
subops.emplace_back(std::forward<Args>(args)...);
57-
};
58-
59-
SnapTrimEvent::remove_or_update_iertr::future<>
60-
SnapTrimEvent::SubOpBlocker::wait_completion()
61-
{
62-
return interruptor::do_for_each(subops, [](auto&& kv) {
63-
return std::move(kv.second);
64-
});
65-
}
66-
6742
void SnapTrimEvent::print(std::ostream &lhs) const
6843
{
6944
lhs << "SnapTrimEvent("
@@ -161,7 +136,7 @@ SnapTrimEvent::start()
161136
return enter_stage<interruptor>(wait_subop);
162137
}).then_interruptible([this] {
163138
logger().debug("{}: awaiting completion", *this);
164-
return subop_blocker.wait_completion();
139+
return subop_blocker.interruptible_wait_completion();
165140
}).finally([this] {
166141
pg->background_process_lock.unlock();
167142
}).si_then([this] {

src/crimson/osd/osd_operations/snaptrim_event.h

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include "crimson/osd/osdmap_gate.h"
1010
#include "crimson/osd/osd_operation.h"
11+
#include "crimson/common/subop_blocker.h"
1112
#include "crimson/osd/osd_operations/common/pg_pipeline.h"
1213
#include "crimson/osd/pg.h"
1314
#include "crimson/osd/pg_activation_blocker.h"
@@ -57,22 +58,7 @@ class SnapTrimEvent final : public PhasedOperationT<SnapTrimEvent> {
5758
private:
5859
CommonPGPipeline& client_pp();
5960

60-
// bases on 998cb8c141bb89aafae298a9d5e130fbd78fe5f2
61-
struct SubOpBlocker : crimson::BlockerT<SubOpBlocker> {
62-
static constexpr const char* type_name = "CompoundOpBlocker";
63-
64-
using id_done_t = std::pair<crimson::OperationRef,
65-
remove_or_update_iertr::future<>>;
66-
67-
void dump_detail(Formatter *f) const final;
68-
69-
template <class... Args>
70-
void emplace_back(Args&&... args);
71-
72-
remove_or_update_iertr::future<> wait_completion();
73-
private:
74-
std::vector<id_done_t> subops;
75-
} subop_blocker;
61+
SubOpBlocker<remove_or_update_iertr::future<>> subop_blocker;
7662

7763
// we don't need to synchronize with other instances of SnapTrimEvent;
7864
// it's here for the sake of op tracking.

0 commit comments

Comments
 (0)