Merge pull request #45348 from liu-chunmei/seastore-op-version

crimson: add CEPH_OSD_OP_ASSERT_VER

Reviewed-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
This commit is contained in:
Liu-Chunmei 2022-03-15 12:48:55 -07:00 committed by GitHub
commit 3d8aa0ae0f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 0 deletions

View File

@ -459,6 +459,19 @@ auto OpsExecuter::do_write_op(Func&& f, bool um) {
user_modify = um;
return std::forward<Func>(f)(pg->get_backend(), obc->obs, txn);
}
OpsExecuter::call_errorator::future<> OpsExecuter::do_assert_ver(
OSDOp& osd_op,
const ObjectState& os)
{
if (!osd_op.op.assert_ver.ver) {
return crimson::ct_error::invarg::make();
} else if (osd_op.op.assert_ver.ver < os.oi.user_version) {
return crimson::ct_error::erange::make();
} else if (osd_op.op.assert_ver.ver > os.oi.user_version) {
return crimson::ct_error::value_too_large::make();
}
return seastar::now();
}
OpsExecuter::interruptible_errorated_future<OpsExecuter::osd_op_errorator>
OpsExecuter::execute_op(OSDOp& osd_op)
@ -634,6 +647,10 @@ OpsExecuter::execute_op(OSDOp& osd_op)
return do_read_op([this, &osd_op] (auto&, const auto& os) {
return do_op_notify_ack(osd_op, os);
});
case CEPH_OSD_OP_ASSERT_VER:
return do_read_op([this, &osd_op] (auto&, const auto& os) {
return do_assert_ver(osd_op, os);
});
default:
logger().warn("unknown op {}", ceph_osd_op_name(op.op));

View File

@ -41,6 +41,7 @@ class OpsExecuter : public seastar::enable_lw_shared_from_this<OpsExecuter> {
crimson::stateful_ec,
crimson::ct_error::enoent,
crimson::ct_error::invarg,
crimson::ct_error::erange,
crimson::ct_error::permission_denied,
crimson::ct_error::operation_not_supported,
crimson::ct_error::input_output_error,
@ -205,6 +206,9 @@ private:
watch_ierrorator::future<> do_op_notify_ack(
OSDOp& osd_op,
const ObjectState& os);
call_errorator::future<> do_assert_ver(
OSDOp& osd_op,
const ObjectState& os);
template <class Func>
auto do_const_op(Func&& f);