Skip to content

Commit 29d5e8d

Browse files
authored
Merge pull request ceph#55772 from xxhdx1985126/wip-seastore-attr-related-bug-fixes
crimson/os/seastore: two attrs related bug fixes Reviewed-by: Chunmei Liu <[email protected]> Reviewed-by: Yingxin Cheng <[email protected]>
2 parents 8aba1b1 + 8cc2504 commit 29d5e8d

File tree

3 files changed

+47
-13
lines changed

3 files changed

+47
-13
lines changed

src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,7 @@ OMapLeafNode::list(
653653

654654
for (; iter != liter && result.size() < config.max_result_size; iter++) {
655655
result.emplace(std::make_pair(iter->get_key(), iter->get_val()));
656+
DEBUGT("found key {}", oc.t, iter->get_key());
656657
}
657658

658659
complete = (iter == liter);

src/crimson/os/seastore/seastore.cc

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -937,18 +937,22 @@ SeaStore::Shard::get_attrs(
937937
[=, this](auto &t, auto& onode) {
938938
auto& layout = onode.get_layout();
939939
return omap_list(onode, layout.xattr_root, t, std::nullopt,
940-
OMapManager::omap_list_config_t().with_inclusive(false, false)
941-
).si_then([&layout](auto p) {
940+
OMapManager::omap_list_config_t()
941+
.with_inclusive(false, false)
942+
.without_max()
943+
).si_then([&layout, &t, FNAME](auto p) {
942944
auto& attrs = std::get<1>(p);
943945
ceph::bufferlist bl;
944946
if (layout.oi_size) {
945947
bl.append(ceph::bufferptr(&layout.oi[0], layout.oi_size));
946948
attrs.emplace(OI_ATTR, std::move(bl));
949+
DEBUGT("set oi from onode layout", t);
947950
}
948951
if (layout.ss_size) {
949952
bl.clear();
950953
bl.append(ceph::bufferptr(&layout.ss[0], layout.ss_size));
951954
attrs.emplace(SS_ATTR, std::move(bl));
955+
DEBUGT("set ss from onode layout", t);
952956
}
953957
return seastar::make_ready_future<omap_values_t>(std::move(attrs));
954958
});
@@ -1476,28 +1480,49 @@ SeaStore::Shard::_do_transaction_step(
14761480
}
14771481

14781482
SeaStore::Shard::tm_ret
1479-
SeaStore::Shard::_remove(
1483+
SeaStore::Shard::_remove_omaps(
14801484
internal_context_t &ctx,
1481-
OnodeRef &onode)
1485+
OnodeRef &onode,
1486+
omap_root_t &&omap_root)
14821487
{
1483-
LOG_PREFIX(SeaStore::_remove);
1484-
DEBUGT("onode={}", *ctx.transaction, *onode);
1485-
auto fut = BtreeOMapManager::omap_clear_iertr::now();
1486-
auto omap_root = onode->get_layout().omap_root.get(
1487-
onode->get_metadata_hint(device->get_block_size()));
14881488
if (omap_root.get_location() != L_ADDR_NULL) {
1489-
fut = seastar::do_with(
1489+
return seastar::do_with(
14901490
BtreeOMapManager(*transaction_manager),
1491-
onode->get_layout().omap_root.get(
1492-
onode->get_metadata_hint(device->get_block_size())),
1491+
std::move(omap_root),
14931492
[&ctx, onode](auto &omap_manager, auto &omap_root) {
14941493
return omap_manager.omap_clear(
14951494
omap_root,
14961495
*ctx.transaction
1496+
).handle_error_interruptible(
1497+
crimson::ct_error::input_output_error::pass_further(),
1498+
crimson::ct_error::assert_all{
1499+
"Invalid error in SeaStore::_remove"
1500+
}
14971501
);
14981502
});
14991503
}
1500-
return fut.si_then([this, &ctx, onode] {
1504+
return tm_iertr::now();
1505+
}
1506+
1507+
SeaStore::Shard::tm_ret
1508+
SeaStore::Shard::_remove(
1509+
internal_context_t &ctx,
1510+
OnodeRef &onode)
1511+
{
1512+
LOG_PREFIX(SeaStore::_remove);
1513+
DEBUGT("onode={}", *ctx.transaction, *onode);
1514+
return _remove_omaps(
1515+
ctx,
1516+
onode,
1517+
onode->get_layout().omap_root.get(
1518+
onode->get_metadata_hint(device->get_block_size()))
1519+
).si_then([this, &ctx, onode]() mutable {
1520+
return _remove_omaps(
1521+
ctx,
1522+
onode,
1523+
onode->get_layout().xattr_root.get(
1524+
onode->get_metadata_hint(device->get_block_size())));
1525+
}).si_then([this, &ctx, onode] {
15011526
return seastar::do_with(
15021527
ObjectDataHandler(max_object_size),
15031528
[=, this, &ctx](auto &objhandler) {
@@ -1841,6 +1866,7 @@ SeaStore::Shard::_setattrs(
18411866
}
18421867
onode->update_object_info(*ctx.transaction, val);
18431868
aset.erase(it);
1869+
DEBUGT("set oi in onode layout", *ctx.transaction);
18441870
} else {
18451871
onode->clear_object_info(*ctx.transaction);
18461872
}
@@ -1855,15 +1881,18 @@ SeaStore::Shard::_setattrs(
18551881
}
18561882
onode->update_snapset(*ctx.transaction, val);
18571883
aset.erase(it);
1884+
DEBUGT("set ss in onode layout", *ctx.transaction);
18581885
} else {
18591886
onode->clear_snapset(*ctx.transaction);
18601887
}
18611888
}
18621889

18631890
if (aset.empty()) {
1891+
DEBUGT("all attrs set in onode layout", *ctx.transaction);
18641892
return fut;
18651893
}
18661894

1895+
DEBUGT("set attrs in omap", *ctx.transaction);
18671896
return fut.si_then(
18681897
[this, onode, &ctx, aset=std::move(aset)]() mutable {
18691898
return _omap_set_kvs(

src/crimson/os/seastore/seastore.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,10 @@ class SeaStore final : public FuturizedStore {
343343
std::vector<OnodeRef> &d_onodes,
344344
ceph::os::Transaction::iterator &i);
345345

346+
tm_ret _remove_omaps(
347+
internal_context_t &ctx,
348+
OnodeRef &onode,
349+
omap_root_t &&omap_root);
346350
tm_ret _remove(
347351
internal_context_t &ctx,
348352
OnodeRef &onode);

0 commit comments

Comments
 (0)