From: Amnon Hanuhov Date: Wed, 27 May 2020 09:58:20 +0000 (+0300) Subject: crimson/osd: Implement CEPH_OSD_OP_OMAPRMKEYRANGE X-Git-Tag: v16.1.0~1839^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=135ed7eb65e410d907b8156f00debf6f41eb44e4;p=ceph.git crimson/osd: Implement CEPH_OSD_OP_OMAPRMKEYRANGE Signed-off-by: Amnon Hanuhov --- diff --git a/src/crimson/osd/ops_executer.cc b/src/crimson/osd/ops_executer.cc index d2fb4a6aef95..739b7c65e330 100644 --- a/src/crimson/osd/ops_executer.cc +++ b/src/crimson/osd/ops_executer.cc @@ -768,6 +768,15 @@ OpsExecuter::execute_osd_op(OSDOp& osd_op) return do_write_op([&osd_op] (auto& backend, auto& os, auto& txn) { return backend.omap_set_header(os, osd_op, txn); }, true); + case CEPH_OSD_OP_OMAPRMKEYRANGE: +#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_remove_range(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 60311d7a759a..494d0ea024e6 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -699,12 +699,32 @@ seastar::future<> PGBackend::omap_set_header( 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++; + //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::omap_remove_range( + ObjectState& os, + const OSDOp& osd_op, + ceph::os::Transaction& txn) +{ + std::string key_begin, key_end; + try { + auto p = osd_op.indata.cbegin(); + decode(key_begin, p); + decode(key_end, p); + } catch (buffer::error& e) { + throw crimson::osd::invalid_argument{}; + } + txn.omap_rmkeyrange(coll->get_cid(), ghobject_t{os.oi.soid}, key_begin, key_end); + //TODO: + //ctx->delta_stats.num_wr++; + 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 55704302deb6..894654debda4 100644 --- a/src/crimson/osd/pg_backend.h +++ b/src/crimson/osd/pg_backend.h @@ -141,6 +141,10 @@ public: ObjectState& os, const OSDOp& osd_op, ceph::os::Transaction& trans); + seastar::future<> omap_remove_range( + ObjectState& os, + const OSDOp& osd_op, + ceph::os::Transaction& trans); virtual void got_rep_op_reply(const MOSDRepOpReply&) {} virtual seastar::future<> stop() = 0;