From: Jeff Layton Date: Thu, 3 Mar 2022 18:30:31 +0000 (-0500) Subject: librados: add ability to pass a truncate_size/seq to sparse_read X-Git-Tag: v17.2.0~9^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0ea387dd941b60113a2c0af7928a48dd6a84058f;p=ceph.git librados: add ability to pass a truncate_size/seq to sparse_read Fixes: http://tracker.ceph.com/issues/54280 Signed-off-by: Jeff Layton (cherry picked from commit b9bf65ac62f50ddf5616e0544e3c7b8c9030ced6) --- diff --git a/src/include/rados/librados.hpp b/src/include/rados/librados.hpp index 7c883c33648d..b40d7bf9a571 100644 --- a/src/include/rados/librados.hpp +++ b/src/include/rados/librados.hpp @@ -551,7 +551,9 @@ inline namespace v14_2_0 { * see aio_sparse_read() */ void sparse_read(uint64_t off, uint64_t len, std::map *m, - bufferlist *data_bl, int *prval); + bufferlist *data_bl, int *prval, + uint64_t truncate_size = 0, + uint32_t truncate_seq = 0); /** * omap_get_vals: keys and values from the object omap diff --git a/src/librados/librados_cxx.cc b/src/librados/librados_cxx.cc index e601920eb43c..46aa8d80ce37 100644 --- a/src/librados/librados_cxx.cc +++ b/src/librados/librados_cxx.cc @@ -224,11 +224,13 @@ void librados::ObjectReadOperation::read(size_t off, uint64_t len, bufferlist *p void librados::ObjectReadOperation::sparse_read(uint64_t off, uint64_t len, std::map *m, - bufferlist *data_bl, int *prval) + bufferlist *data_bl, int *prval, + uint64_t truncate_size, + uint32_t truncate_seq) { ceph_assert(impl); ::ObjectOperation *o = &impl->o; - o->sparse_read(off, len, m, data_bl, prval); + o->sparse_read(off, len, m, data_bl, prval, truncate_size, truncate_seq); } void librados::ObjectReadOperation::checksum(rados_checksum_type_t type, diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index 582ce8c19789..d9d723dca747 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -519,9 +519,13 @@ struct ObjectOperation { } }; void sparse_read(uint64_t off, uint64_t len, std::map* m, - ceph::buffer::list* data_bl, int* prval) { + ceph::buffer::list* data_bl, int* prval, + uint64_t truncate_size = 0, uint32_t truncate_seq = 0) { ceph::buffer::list bl; add_data(CEPH_OSD_OP_SPARSE_READ, off, len, bl); + OSDOp& o = *ops.rbegin(); + o.op.extent.truncate_size = truncate_size; + o.op.extent.truncate_seq = truncate_seq; set_handler(CB_ObjectOperation_sparse_read(data_bl, m, prval, nullptr)); out_rval.back() = prval; } diff --git a/src/test/librados_test_stub/LibradosTestStub.cc b/src/test/librados_test_stub/LibradosTestStub.cc index 9e430057faab..c19de9a86598 100644 --- a/src/test/librados_test_stub/LibradosTestStub.cc +++ b/src/test/librados_test_stub/LibradosTestStub.cc @@ -902,7 +902,9 @@ void ObjectReadOperation::read(size_t off, uint64_t len, bufferlist *pbl, void ObjectReadOperation::sparse_read(uint64_t off, uint64_t len, std::map *m, - bufferlist *pbl, int *prval) { + bufferlist *pbl, int *prval, + uint64_t truncate_size, + uint32_t truncate_seq) { TestObjectOperationImpl *o = reinterpret_cast(impl); ObjectOperationTestImpl op;