]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: implement CEPH_OSD_OP_STAT.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 31 Jul 2019 18:08:59 +0000 (20:08 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Fri, 23 Aug 2019 23:27:44 +0000 (01:27 +0200)
This commit is enabler of cls_cxx_stat(), and thus the RecordHello
and ClsHello unit test.

Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/osd/pg.cc
src/crimson/osd/pg_backend.cc
src/crimson/osd/pg_backend.h

index dd0edf70512f8eaeb8b03faaa2d533f5f439eb43..02d55e6f46bf81610a983a8f78200046428f59db 100644 (file)
@@ -368,6 +368,8 @@ PG::do_osd_op(ObjectState& os, OSDOp& osd_op, ceph::os::Transaction& txn)
     return backend->remove(os, txn);
   case CEPH_OSD_OP_CALL:
     return backend->call(os, osd_op, txn);
+  case CEPH_OSD_OP_STAT:
+    return backend->stat(os, osd_op);
   default:
     logger().warn("unknown op {}", ceph_osd_op_name(op.op));
     throw std::runtime_error(
index 4ae3adc760a3d8d5d87852ffee608576686dd170..e539544bed35be1e87ec73d445d5dc13d1af3db4 100644 (file)
@@ -247,6 +247,22 @@ seastar::future<bufferlist> PGBackend::read(const object_info_t& oi,
     });
 }
 
+seastar::future<> PGBackend::stat(
+  ObjectState& os,
+  OSDOp& osd_op)
+{
+  if (os.exists/* TODO: && !os.is_whiteout() */) {
+    logger().debug("stat os.oi.size={}, os.oi.mtime={}", os.oi.size, os.oi.mtime);
+    encode(os.oi.size, osd_op.outdata);
+    encode(os.oi.mtime, osd_op.outdata);
+  } else {
+    logger().debug("stat object does not exist");
+    throw ::object_not_found();
+  }
+  return seastar::now();
+  // TODO: ctx->delta_stats.num_rd++;
+}
+
 bool PGBackend::maybe_create_new_object(
   ObjectState& os,
   ceph::os::Transaction& txn)
index 543c9ec84587ac21068521d8fe9eb29b375ed54b..dbe1537c72430f3a8fd42e9976181c331635c762 100644 (file)
@@ -47,6 +47,9 @@ public:
                                   size_t truncate_size,
                                   uint32_t truncate_seq,
                                   uint32_t flags);
+  seastar::future<> stat(
+    ObjectState& os,
+    OSDOp& osd_op);
   seastar::future<> remove(
     ObjectState& os,
     ceph::os::Transaction& txn);