From: Radoslaw Zarzynski Date: Wed, 31 Jul 2019 18:08:59 +0000 (+0200) Subject: crimson/osd: implement CEPH_OSD_OP_STAT. X-Git-Tag: v15.1.0~1774^2~19 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=3d8b28bfa04269d83ed23e1ba61bee964b30b6e0;p=ceph-ci.git crimson/osd: implement CEPH_OSD_OP_STAT. This commit is enabler of cls_cxx_stat(), and thus the RecordHello and ClsHello unit test. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index dd0edf70512..02d55e6f46b 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -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( diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index 4ae3adc760a..e539544bed3 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -247,6 +247,22 @@ seastar::future 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) diff --git a/src/crimson/osd/pg_backend.h b/src/crimson/osd/pg_backend.h index 543c9ec8458..dbe1537c724 100644 --- a/src/crimson/osd/pg_backend.h +++ b/src/crimson/osd/pg_backend.h @@ -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);