Skip to content

Commit 1ee3210

Browse files
committed
crimson/os/seastore/transaction_manager: misc cleanups
Signed-off-by: Yingxin Cheng <[email protected]>
1 parent 14eacf6 commit 1ee3210

File tree

2 files changed

+74
-82
lines changed

2 files changed

+74
-82
lines changed

src/crimson/os/seastore/transaction_manager.cc

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ TransactionManager::mkfs_ertr::future<> TransactionManager::mkfs()
9898
});
9999
}
100100

101-
TransactionManager::mount_ertr::future<> TransactionManager::mount()
101+
TransactionManager::mount_ertr::future<>
102+
TransactionManager::mount()
102103
{
103104
LOG_PREFIX(TransactionManager::mount);
104105
INFO("enter");
@@ -175,7 +176,8 @@ TransactionManager::mount_ertr::future<> TransactionManager::mount()
175176
);
176177
}
177178

178-
TransactionManager::close_ertr::future<> TransactionManager::close() {
179+
TransactionManager::close_ertr::future<>
180+
TransactionManager::close() {
179181
LOG_PREFIX(TransactionManager::close);
180182
INFO("enter");
181183
return epm->stop_background(
@@ -241,11 +243,11 @@ TransactionManager::ref_ret TransactionManager::remove(
241243
});
242244
}
243245

244-
TransactionManager::ref_ret TransactionManager::_dec_ref(
246+
TransactionManager::ref_ret TransactionManager::remove(
245247
Transaction &t,
246248
laddr_t offset)
247249
{
248-
LOG_PREFIX(TransactionManager::_dec_ref);
250+
LOG_PREFIX(TransactionManager::remove);
249251
TRACET("{}", t, offset);
250252
return lba_manager->decref_extent(t, offset
251253
).si_then([this, FNAME, offset, &t](auto result) -> ref_ret {
@@ -273,17 +275,18 @@ TransactionManager::refs_ret TransactionManager::remove(
273275
LOG_PREFIX(TransactionManager::remove);
274276
DEBUG("{} offsets", offsets.size());
275277
return seastar::do_with(std::move(offsets), std::vector<unsigned>(),
276-
[this, &t] (auto &&offsets, auto &refcnt) {
277-
return trans_intr::do_for_each(offsets.begin(), offsets.end(),
278-
[this, &t, &refcnt] (auto &laddr) {
279-
return this->remove(t, laddr).si_then([&refcnt] (auto ref) {
280-
refcnt.push_back(ref);
281-
return ref_iertr::now();
282-
});
283-
}).si_then([&refcnt] {
284-
return ref_iertr::make_ready_future<std::vector<unsigned>>(std::move(refcnt));
278+
[this, &t](auto &&offsets, auto &refcnts) {
279+
return trans_intr::do_for_each(offsets.begin(), offsets.end(),
280+
[this, &t, &refcnts](auto &laddr) {
281+
return this->remove(t, laddr
282+
).si_then([&refcnts](auto ref) {
283+
refcnts.push_back(ref);
284+
return ref_iertr::now();
285285
});
286+
}).si_then([&refcnts] {
287+
return ref_iertr::make_ready_future<std::vector<unsigned>>(std::move(refcnts));
286288
});
289+
});
287290
}
288291

289292
TransactionManager::submit_transaction_iertr::future<>
@@ -340,6 +343,7 @@ TransactionManager::update_lba_mappings(
340343
return;
341344
}
342345
if (extent->is_logical()) {
346+
assert(is_logical_type(extent->get_type()));
343347
// for rewritten extents, last_committed_crc should have been set
344348
// because the crc of the original extent may be reused.
345349
// also see rewrite_logical_extent()
@@ -359,6 +363,7 @@ TransactionManager::update_lba_mappings(
359363
#endif
360364
lextents.emplace_back(extent->template cast<LogicalCachedExtent>());
361365
} else {
366+
assert(is_physical_type(extent->get_type()));
362367
pextents.emplace_back(extent);
363368
}
364369
};
@@ -566,7 +571,8 @@ TransactionManager::rewrite_logical_extent(
566571
0,
567572
lextent->get_length(),
568573
extent_ref_count_t(0),
569-
[this, lextent, &t](auto &extents, auto &off, auto &left, auto &refcount) {
574+
[this, lextent, &t]
575+
(auto &extents, auto &off, auto &left, auto &refcount) {
570576
return trans_intr::do_for_each(
571577
extents,
572578
[lextent, this, &t, &off, &left, &refcount](auto &nextent) {
@@ -665,20 +671,20 @@ TransactionManager::rewrite_extent_ret TransactionManager::rewrite_extent(
665671
t.get_rewrite_stats().account_n_dirty();
666672
}
667673

668-
if (is_backref_node(extent->get_type())) {
669-
DEBUGT("rewriting backref extent -- {}", t, *extent);
670-
return backref_manager->rewrite_extent(t, extent);
671-
}
672-
673674
if (is_root_type(extent->get_type())) {
674675
DEBUGT("rewriting root extent -- {}", t, *extent);
675676
cache->duplicate_for_write(t, extent);
676677
return rewrite_extent_iertr::now();
677678
}
678679

679680
if (extent->is_logical()) {
681+
assert(is_logical_type(extent->get_type()));
680682
return rewrite_logical_extent(t, extent->cast<LogicalCachedExtent>());
683+
} else if (is_backref_node(extent->get_type())) {
684+
DEBUGT("rewriting backref extent -- {}", t, *extent);
685+
return backref_manager->rewrite_extent(t, extent);
681686
} else {
687+
assert(is_lba_node(extent->get_type()));
682688
DEBUGT("rewriting physical extent -- {}", t, *extent);
683689
return lba_manager->rewrite_extent(t, extent);
684690
}

src/crimson/os/seastore/transaction_manager.h

Lines changed: 49 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -215,49 +215,6 @@ class TransactionManager : public ExtentCallbackInterface {
215215
});
216216
}
217217

218-
template <typename T>
219-
std::variant<LBAMappingRef, base_iertr::future<TCachedExtentRef<T>>>
220-
get_extent_if_linked(
221-
Transaction &t,
222-
LBAMappingRef pin)
223-
{
224-
ceph_assert(pin->is_parent_viewable());
225-
// checking the lba child must be atomic with creating
226-
// and linking the absent child
227-
auto v = pin->get_logical_extent(t);
228-
if (v.has_child()) {
229-
return v.get_child_fut().safe_then([pin=std::move(pin)](auto extent) {
230-
#ifndef NDEBUG
231-
auto lextent = extent->template cast<LogicalCachedExtent>();
232-
auto pin_laddr = pin->get_key();
233-
if (pin->is_indirect()) {
234-
pin_laddr = pin->get_intermediate_base();
235-
}
236-
assert(lextent->get_laddr() == pin_laddr);
237-
#endif
238-
return extent->template cast<T>();
239-
});
240-
} else {
241-
return pin;
242-
}
243-
}
244-
245-
base_iertr::future<LogicalCachedExtentRef> read_pin_by_type(
246-
Transaction &t,
247-
LBAMappingRef pin,
248-
extent_types_t type)
249-
{
250-
ceph_assert(!pin->parent_modified());
251-
auto v = pin->get_logical_extent(t);
252-
// checking the lba child must be atomic with creating
253-
// and linking the absent child
254-
if (v.has_child()) {
255-
return std::move(v.get_child_fut());
256-
} else {
257-
return pin_to_extent_by_type(t, std::move(pin), type);
258-
}
259-
}
260-
261218
/// Obtain mutable copy of extent
262219
LogicalCachedExtentRef get_mutable_extent(Transaction &t, LogicalCachedExtentRef ref) {
263220
LOG_PREFIX(TransactionManager::get_mutable_extent);
@@ -282,7 +239,6 @@ class TransactionManager : public ExtentCallbackInterface {
282239
return ret;
283240
}
284241

285-
286242
using ref_iertr = LBAManager::ref_iertr;
287243
using ref_ret = ref_iertr::future<extent_ref_count_t>;
288244

@@ -302,26 +258,15 @@ class TransactionManager : public ExtentCallbackInterface {
302258
* remove
303259
*
304260
* Remove the extent and the corresponding lba mapping,
305-
* users must make sure that lba mapping's refcount is 1
261+
* users must make sure that lba mapping's refcount > 1
306262
*/
307263
ref_ret remove(
308264
Transaction &t,
309265
LogicalCachedExtentRef &ref);
310266

311-
/**
312-
* remove
313-
*
314-
* 1. Remove the indirect mapping(s), and if refcount drops to 0,
315-
* also remove the direct mapping and retire the extent.
316-
*
317-
* 2. Remove the direct mapping(s) and retire the extent if
318-
* refcount drops to 0.
319-
*/
320267
ref_ret remove(
321268
Transaction &t,
322-
laddr_t offset) {
323-
return _dec_ref(t, offset);
324-
}
269+
laddr_t offset);
325270

326271
/// remove refcount for list of offset
327272
using refs_ret = ref_iertr::future<std::vector<unsigned>>;
@@ -411,7 +356,10 @@ class TransactionManager : public ExtentCallbackInterface {
411356
}
412357

413358
template <typename T>
414-
read_extent_ret<T> get_mutable_extent_by_laddr(Transaction &t, laddr_t laddr, extent_len_t len) {
359+
read_extent_ret<T> get_mutable_extent_by_laddr(
360+
Transaction &t,
361+
laddr_t laddr,
362+
extent_len_t len) {
415363
return get_pin(t, laddr
416364
).si_then([this, &t, len](auto pin) {
417365
ceph_assert(pin->is_data_stable() && !pin->is_zero_reserved());
@@ -853,6 +801,49 @@ class TransactionManager : public ExtentCallbackInterface {
853801

854802
shard_stats_t& shard_stats;
855803

804+
template <typename T>
805+
std::variant<LBAMappingRef, base_iertr::future<TCachedExtentRef<T>>>
806+
get_extent_if_linked(
807+
Transaction &t,
808+
LBAMappingRef pin)
809+
{
810+
ceph_assert(pin->is_parent_viewable());
811+
// checking the lba child must be atomic with creating
812+
// and linking the absent child
813+
auto v = pin->get_logical_extent(t);
814+
if (v.has_child()) {
815+
return v.get_child_fut().safe_then([pin=std::move(pin)](auto extent) {
816+
#ifndef NDEBUG
817+
auto lextent = extent->template cast<LogicalCachedExtent>();
818+
auto pin_laddr = pin->get_key();
819+
if (pin->is_indirect()) {
820+
pin_laddr = pin->get_intermediate_base();
821+
}
822+
assert(lextent->get_laddr() == pin_laddr);
823+
#endif
824+
return extent->template cast<T>();
825+
});
826+
} else {
827+
return pin;
828+
}
829+
}
830+
831+
base_iertr::future<LogicalCachedExtentRef> read_pin_by_type(
832+
Transaction &t,
833+
LBAMappingRef pin,
834+
extent_types_t type)
835+
{
836+
ceph_assert(!pin->parent_modified());
837+
auto v = pin->get_logical_extent(t);
838+
// checking the lba child must be atomic with creating
839+
// and linking the absent child
840+
if (v.has_child()) {
841+
return std::move(v.get_child_fut());
842+
} else {
843+
return pin_to_extent_by_type(t, std::move(pin), type);
844+
}
845+
}
846+
856847
rewrite_extent_ret rewrite_logical_extent(
857848
Transaction& t,
858849
LogicalCachedExtentRef extent);
@@ -862,11 +853,6 @@ class TransactionManager : public ExtentCallbackInterface {
862853
ExtentPlacementManager::dispatch_result_t dispatch_result,
863854
std::optional<journal_seq_t> seq_to_trim = std::nullopt);
864855

865-
/// Remove refcount for offset
866-
ref_ret _dec_ref(
867-
Transaction &t,
868-
laddr_t offset);
869-
870856
using update_lba_mappings_ret = LBAManager::update_mappings_ret;
871857
update_lba_mappings_ret update_lba_mappings(
872858
Transaction &t,

0 commit comments

Comments
 (0)