ceph_le32 oi_size{0};
ceph_le32 ss_size{0};
omap_root_le_t omap_root;
- omap_root_le_t log_root;
omap_root_le_t xattr_root;
object_data_le_t object_data;
*/
bool need_cow = false;
- onode_layout_t() : omap_root(omap_type_t::OMAP), log_root(omap_type_t::LOG),
+ onode_layout_t() : omap_root(omap_type_t::OMAP),
xattr_root(omap_type_t::XATTR) {}
const omap_root_le_t& get_root(omap_type_t type) const {
if (type == omap_type_t::XATTR) {
return xattr_root;
- } else if (type == omap_type_t::OMAP) {
- return omap_root;
} else {
- assert(type == omap_type_t::LOG);
- return log_root;
+ assert(type == omap_type_t::LOG || type == omap_type_t::OMAP);
+ return omap_root;
}
}
} __attribute__((packed));
}
virtual void update_onode_size(Transaction&, uint32_t) = 0;
virtual void update_omap_root(Transaction&, omap_root_t&) = 0;
- virtual void update_log_root(Transaction&, omap_root_t&) = 0;
virtual void update_xattr_root(Transaction&, omap_root_t&) = 0;
virtual void update_object_data(Transaction&, object_data_t&) = 0;
virtual void update_object_info(Transaction&, ceph::bufferlist&) = 0;
DEBUG("update omap root");
bliter.copy(sizeof(mlayout.omap_root), (char *)&mlayout.omap_root);
break;
- case delta_op_t::UPDATE_LOG_ROOT:
- DEBUG("update log root");
- bliter.copy(sizeof(mlayout.log_root), (char *)&mlayout.log_root);
- break;
case delta_op_t::UPDATE_XATTR_ROOT:
DEBUG("update xattr root");
bliter.copy(sizeof(mlayout.xattr_root), (char *)&mlayout.xattr_root);
(const char *)&layout.omap_root,
sizeof(layout.omap_root));
break;
- case delta_op_t::UPDATE_LOG_ROOT:
- DEBUG("update log root");
- encoded.append(
- (const char *)&layout.log_root,
- sizeof(layout.log_root));
- break;
case delta_op_t::UPDATE_XATTR_ROOT:
DEBUG("update xattr root");
encoded.append(
enum class delta_op_t : uint8_t {
UPDATE_ONODE_SIZE,
UPDATE_OMAP_ROOT,
- UPDATE_LOG_ROOT,
UPDATE_XATTR_ROOT,
UPDATE_OBJECT_DATA,
UPDATE_OBJECT_INFO,
o_payload_mut.get_write());
std::swap(mlayout.object_data, o_mlayout.object_data);
std::swap(mlayout.omap_root, o_mlayout.omap_root);
- std::swap(mlayout.log_root, o_mlayout.log_root);
std::swap(mlayout.xattr_root, o_mlayout.xattr_root);
if (recorder) {
recorder->encode_update(
payload_mut, Recorder::delta_op_t::UPDATE_OBJECT_DATA);
recorder->encode_update(
payload_mut, Recorder::delta_op_t::UPDATE_OMAP_ROOT);
- recorder->encode_update(
- payload_mut, Recorder::delta_op_t::UPDATE_LOG_ROOT);
recorder->encode_update(
payload_mut, Recorder::delta_op_t::UPDATE_XATTR_ROOT);
}
o_payload_mut, Recorder::delta_op_t::UPDATE_OBJECT_DATA);
o_recorder->encode_update(
o_payload_mut, Recorder::delta_op_t::UPDATE_OMAP_ROOT);
- o_recorder->encode_update(
- o_payload_mut, Recorder::delta_op_t::UPDATE_LOG_ROOT);
o_recorder->encode_update(
o_payload_mut, Recorder::delta_op_t::UPDATE_XATTR_ROOT);
}
}
void update_omap_root(Transaction &t, omap_root_t &oroot) final {
- assert(oroot.get_type() == omap_type_t::OMAP);
+ assert(oroot.get_type() == omap_type_t::OMAP ||
+ oroot.get_type() == omap_type_t::LOG);
with_mutable_layout(
t,
[&oroot](NodeExtentMutable &payload_mut, Recorder *recorder) {
});
}
- void update_log_root(Transaction &t, omap_root_t &lroot) final {
- assert(lroot.get_type() == omap_type_t::LOG);
- with_mutable_layout(
- t,
- [&lroot](NodeExtentMutable &payload_mut, Recorder *recorder) {
- auto &mlayout = *reinterpret_cast<onode_layout_t*>(
- payload_mut.get_write());
- mlayout.log_root.update(lroot);
- if (recorder) {
- recorder->encode_update(
- payload_mut, Recorder::delta_op_t::UPDATE_LOG_ROOT);
- }
- });
- }
-
void update_xattr_root(Transaction &t, omap_root_t &xroot) final {
assert(xroot.get_type() == omap_type_t::XATTR);
with_mutable_layout(
return omaptree_initialize(
*ctx.transaction, mgr, omap_type_t::LOG, *onode, *device
).si_then([&onode, &ctx](auto new_root) {
- onode->update_log_root(*ctx.transaction, new_root);
+ onode->update_omap_root(*ctx.transaction, new_root);
});
}
return tm_iertr::now();
uint32_t size = olayout.size;
auto omap_root = rename_omap_root(omap_type_t::OMAP, *onode, *d_onode);
auto xattr_root = rename_omap_root(omap_type_t::XATTR, *onode, *d_onode);
- auto log_root = rename_omap_root(omap_type_t::LOG, *onode, *d_onode);
auto object_data = olayout.object_data.get();
auto oi_bl = ceph::bufferlist::static_from_mem(
&olayout.oi[0],
d_onode->update_onode_size(*ctx.transaction, size);
d_onode->update_omap_root(*ctx.transaction, omap_root);
d_onode->update_xattr_root(*ctx.transaction, xattr_root);
- d_onode->update_log_root(*ctx.transaction, log_root);
d_onode->update_object_data(*ctx.transaction, object_data);
d_onode->update_object_info(*ctx.transaction, oi_bl);
d_onode->update_snapset(*ctx.transaction, ss_bl);
return omaptree_clear_no_onode(
*ctx.transaction,
get_omap_root(omap_type_t::XATTR, *onode));
- }).si_then([this, &ctx, &onode] {
- return omaptree_clear_no_onode(
- *ctx.transaction,
- get_omap_root(omap_type_t::LOG, *onode));
}).si_then([this, &ctx, &onode] {
return seastar::do_with(
ObjectDataHandler(max_object_size),
omap_type_t::OMAP,
onode.is_head() ? d_onode : onode,
onode.is_head() ? onode : d_onode);
- }).si_then([&ctx, &onode, &d_onode, this] {
- return omaptree_clone(
- *ctx.transaction,
- omap_type_t::LOG,
- onode.is_head() ? d_onode : onode,
- onode.is_head() ? onode : d_onode);
});
}
*ctx.transaction,
get_omap_root(omap_type_t::OMAP, onode),
onode
- ).si_then([this, &ctx, &onode] {
- return omaptree_clear(
- *ctx.transaction,
- get_omap_root(omap_type_t::LOG, onode),
- onode);
- });
+ );
});
}
onode.update_xattr_root(t, root);
} else {
assert(root.get_type() == omap_type_t::LOG);
- onode.update_log_root(t, root);
+ onode.update_omap_root(t, root);
}
}