From 3d8b28bfa04269d83ed23e1ba61bee964b30b6e0 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Wed, 31 Jul 2019 20:08:59 +0200 Subject: [PATCH] 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 --- src/crimson/osd/pg.cc | 2 ++ src/crimson/osd/pg_backend.cc | 16 ++++++++++++++++ src/crimson/osd/pg_backend.h | 3 +++ 3 files changed, 21 insertions(+) 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); -- 2.39.5