]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: Implement CEPH_OSD_OP_OMAPRMKEYRANGE
authorAmnon Hanuhov <ahanukov@redhat.com>
Wed, 27 May 2020 09:58:20 +0000 (12:58 +0300)
committerAmnon Hanuhov <ahanukov@redhat.com>
Wed, 24 Jun 2020 13:18:34 +0000 (16:18 +0300)
Signed-off-by: Amnon Hanuhov <ahanukov@redhat.com>
src/crimson/osd/ops_executer.cc
src/crimson/osd/pg_backend.cc
src/crimson/osd/pg_backend.h

index d2fb4a6aef95db8c82106a5ca68e86ddb658a16b..739b7c65e330f441b0f7416f3c34304a0d18ea24 100644 (file)
@@ -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:
index 60311d7a759abf3093961579813b46d46756c273..494d0ea024e6d62e66523ccd850e55f7d1af7c1f 100644 (file)
@@ -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<struct stat> PGBackend::stat(
   CollectionRef c,
   const ghobject_t& oid) const
index 55704302deb6403d2b7db3b269d70ecc418f1e92..894654debda46b894224bfc1158e2bf6afaa4162 100644 (file)
@@ -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;