]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: Implement CEPH_OSD_OP_OMAPSETHEADER
authorAmnon Hanuhov <ahanukov@redhat.com>
Wed, 27 May 2020 09:49:20 +0000 (12:49 +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 06e8c0aa8a93ef52ee03cba41a4f8a07d3d97c16..d2fb4a6aef95db8c82106a5ca68e86ddb658a16b 100644 (file)
@@ -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:
index 327725aac5059bb54a6fd9c12fcc07683a912761..60311d7a759abf3093961579813b46d46756c273 100644 (file)
@@ -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<struct stat> PGBackend::stat(
   CollectionRef c,
   const ghobject_t& oid) const
index 48e98b863e9e324b6d1bbe49c58e2bc9c645c87e..55704302deb6403d2b7db3b269d70ecc418f1e92 100644 (file)
@@ -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;