mirror of
https://github.com/ceph/ceph
synced 2025-02-21 18:17:42 +00:00
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:
commit
3d8aa0ae0f
@ -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));
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user