From: Amnon Hanuhov Date: Wed, 27 May 2020 09:49:20 +0000 (+0300) Subject: crimson/osd: Implement CEPH_OSD_OP_OMAPSETHEADER X-Git-Tag: v16.1.0~1839^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=115e77f2d0cec4e9f06d76f6f85868c154e3816d;p=ceph.git crimson/osd: Implement CEPH_OSD_OP_OMAPSETHEADER Signed-off-by: Amnon Hanuhov --- diff --git a/src/crimson/osd/ops_executer.cc b/src/crimson/osd/ops_executer.cc index 06e8c0aa8a93..d2fb4a6aef95 100644 --- a/src/crimson/osd/ops_executer.cc +++ b/src/crimson/osd/ops_executer.cc @@ -759,6 +759,15 @@ OpsExecuter::execute_osd_op(OSDOp& osd_op) osd_op_params = osd_op_params_t(); return backend.omap_set_vals(os, osd_op, txn, *osd_op_params); }, true); + case CEPH_OSD_OP_OMAPSETHEADER: +#if 0 + if (!pg.get_pool().info.supports_omap()) { + return crimson::ct_error::operation_not_supported::make(); + } +#endif + return do_write_op([&osd_op] (auto& backend, auto& os, auto& txn) { + return backend.omap_set_header(os, osd_op, txn); + }, true); // watch/notify case CEPH_OSD_OP_WATCH: diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index 327725aac505..60311d7a759a 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -690,6 +690,21 @@ seastar::future<> PGBackend::omap_set_vals( return seastar::now(); } +seastar::future<> PGBackend::omap_set_header( + ObjectState& os, + const OSDOp& osd_op, + ceph::os::Transaction& txn) +{ + maybe_create_new_object(os, txn); + txn.omap_setheader(coll->get_cid(), ghobject_t{os.oi.soid}, osd_op.indata); + //TODO: + //ctx->clean_regions.mark_omap_dirty(); + //ctx->delta_stats.num_wr++; + os.oi.set_flag(object_info_t::FLAG_OMAP); + os.oi.clear_omap_digest(); + return seastar::now(); +} + seastar::future PGBackend::stat( CollectionRef c, const ghobject_t& oid) const diff --git a/src/crimson/osd/pg_backend.h b/src/crimson/osd/pg_backend.h index 48e98b863e9e..55704302deb6 100644 --- a/src/crimson/osd/pg_backend.h +++ b/src/crimson/osd/pg_backend.h @@ -137,6 +137,10 @@ public: seastar::future<> omap_get_header( const ObjectState& os, OSDOp& osd_op) const; + seastar::future<> omap_set_header( + ObjectState& os, + const OSDOp& osd_op, + ceph::os::Transaction& trans); virtual void got_rep_op_reply(const MOSDRepOpReply&) {} virtual seastar::future<> stop() = 0;