]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: add ability to pass a truncate_size/seq to sparse_read
authorJeff Layton <jlayton@redhat.com>
Thu, 3 Mar 2022 18:30:31 +0000 (13:30 -0500)
committerJeff Layton <jlayton@redhat.com>
Thu, 31 Mar 2022 16:54:55 +0000 (12:54 -0400)
Fixes: http://tracker.ceph.com/issues/54280
Signed-off-by: Jeff Layton <jlayton@redhat.com>
(cherry picked from commit b9bf65ac62f50ddf5616e0544e3c7b8c9030ced6)

src/include/rados/librados.hpp
src/librados/librados_cxx.cc
src/osdc/Objecter.h
src/test/librados_test_stub/LibradosTestStub.cc

index 7c883c33648d008f33088bd9bc18d70cd37ea186..b40d7bf9a571dc5ab6c77936f719b1bc3a3bf2f5 100644 (file)
@@ -551,7 +551,9 @@ inline namespace v14_2_0 {
      * see aio_sparse_read()
      */
     void sparse_read(uint64_t off, uint64_t len, std::map<uint64_t,uint64_t> *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
index e601920eb43c15095f69785c3e61bf9e36cf4041..46aa8d80ce37b7bca925dd199f0781e6bc7c0633 100644 (file)
@@ -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<uint64_t,uint64_t> *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,
index 582ce8c197898d89800d344a82344f096f29166d..d9d723dca747a861a49bb9b08630d8f6e995c22c 100644 (file)
@@ -519,9 +519,13 @@ struct ObjectOperation {
     }
   };
   void sparse_read(uint64_t off, uint64_t len, std::map<uint64_t, uint64_t>* 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;
   }
index 9e430057faabcbccf70e0b78417957923d484e23..c19de9a865989ea77c39a8638f7557993e69439c 100644 (file)
@@ -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<uint64_t,uint64_t> *m,
-                                      bufferlist *pbl, int *prval) {
+                                      bufferlist *pbl, int *prval,
+                                      uint64_t truncate_size,
+                                      uint32_t truncate_seq) {
   TestObjectOperationImpl *o = reinterpret_cast<TestObjectOperationImpl*>(impl);
 
   ObjectOperationTestImpl op;