@@ -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
14781482SeaStore::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 (
0 commit comments