From c480426f38173d53ee40fcbb48714be434d11a9b Mon Sep 17 00:00:00 2001 From: Pritha Srivastava Date: Thu, 20 Jun 2019 13:30:45 +0530 Subject: [PATCH] Adding cls interface for CEPH_OSD_OP_ZERO. Signed-off-by: Pritha Srivastava --- src/crimson/osd/objclass.cc | 13 +++++++++++++ src/objclass/objclass.h | 1 + src/osd/objclass.cc | 10 ++++++++++ src/test/librados_test_stub/LibradosTestStub.cc | 6 ++++++ 4 files changed, 30 insertions(+) diff --git a/src/crimson/osd/objclass.cc b/src/crimson/osd/objclass.cc index e95c38967374f..c5d75d9631489 100644 --- a/src/crimson/osd/objclass.cc +++ b/src/crimson/osd/objclass.cc @@ -223,6 +223,19 @@ int cls_cxx_truncate(cls_method_context_t hctx, int ofs) } } +int cls_cxx_write_zero(cls_method_context_t hctx, int ofs, int len) +{ + OSDOp op{CEPH_OSD_OP_ZERO}; + op.op.extent.offset = ofs; + op.op.extent.length = len; + try { + reinterpret_cast(hctx)->execute_osd_op(op).get(); + return 0; + } catch (ceph::osd::error& e) { + return -e.code().value(); + } +} + int cls_cxx_getxattr(cls_method_context_t hctx, const char *name, bufferlist *outbl) diff --git a/src/objclass/objclass.h b/src/objclass/objclass.h index de43905e29fdc..4f9f4f7b781b7 100644 --- a/src/objclass/objclass.h +++ b/src/objclass/objclass.h @@ -95,6 +95,7 @@ extern int cls_cxx_getxattrs(cls_method_context_t hctx, std::mappg->do_osd_ops(*pctx, ops); } +int cls_cxx_write_zero(cls_method_context_t hctx, int ofs, int len) +{ + PrimaryLogPG::OpContext **pctx = (PrimaryLogPG::OpContext **)hctx; + vector ops(1); + ops[0].op.op = CEPH_OSD_OP_ZERO; + ops[0].op.extent.offset = ofs; + ops[0].op.extent.length = len; + return (*pctx)->pg->do_osd_ops(*pctx, ops); +} + int cls_cxx_getxattr(cls_method_context_t hctx, const char *name, bufferlist *outbl) { diff --git a/src/test/librados_test_stub/LibradosTestStub.cc b/src/test/librados_test_stub/LibradosTestStub.cc index c2f73a4d4913f..c4345fcc5f482 100644 --- a/src/test/librados_test_stub/LibradosTestStub.cc +++ b/src/test/librados_test_stub/LibradosTestStub.cc @@ -1408,6 +1408,12 @@ int cls_cxx_truncate(cls_method_context_t hctx, int ofs) { return ctx->io_ctx_impl->truncate(ctx->oid, ofs, ctx->snapc); } +int cls_cxx_write_zero(cls_method_context_t hctx, int ofs, int len) { + librados::TestClassHandler::MethodContext *ctx = + reinterpret_cast(hctx); + return ctx->io_ctx_impl->zero(ctx->oid, len, ofs, ctx->snapc); +} + int cls_cxx_list_watchers(cls_method_context_t hctx, obj_list_watch_response_t *watchers) { librados::TestClassHandler::MethodContext *ctx = -- 2.39.5