]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
librbd: ObjectReadRequest does not require buffer extents
authorJason Dillaman <dillaman@redhat.com>
Tue, 7 Nov 2017 18:33:12 +0000 (13:33 -0500)
committerJason Dillaman <dillaman@redhat.com>
Thu, 16 Nov 2017 12:31:59 +0000 (07:31 -0500)
The ReadResult wrapper requires the buffer extents to know
how to properly reconstruct the out buffer.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/io/ImageRequest.cc
src/librbd/io/ObjectRequest.cc
src/librbd/io/ObjectRequest.h
src/librbd/io/ReadResult.h
src/test/librbd/io/test_mock_ObjectRequest.cc

index f4a10094ecb0a6e7ba874581f9511f7107ab13ae..52aa33c5ffe999ae35afcfa143fc200ba9ba1d4d 100644 (file)
@@ -353,11 +353,10 @@ void ImageReadRequest<I>::send_request() {
                      << dendl;
 
       auto req_comp = new io::ReadResult::C_SparseReadRequest<I>(
-        aio_comp);
+        aio_comp, std::move(extent.buffer_extents));
       ObjectReadRequest<I> *req = ObjectReadRequest<I>::create(
         &image_ctx, extent.oid.name, extent.objectno, extent.offset,
-        extent.length, extent.buffer_extents, snap_id, m_op_flags,
-       this->m_trace, req_comp);
+        extent.length, snap_id, m_op_flags, this->m_trace, req_comp);
       req_comp->request = req;
 
       if (image_ctx.object_cacher) {
index 4e4a0fcbff8a2660819e34e0f3791436cdb677a0..daa1c3afa45a8f931f88be15cb648b2e5f98ea54 100644 (file)
@@ -202,14 +202,13 @@ bool ObjectRequest<I>::compute_parent_extents() {
 template <typename I>
 ObjectReadRequest<I>::ObjectReadRequest(I *ictx, const std::string &oid,
                                         uint64_t objectno, uint64_t offset,
-                                        uint64_t len, Extents& be,
-                                        librados::snap_t snap_id, int op_flags,
-                                       const ZTracer::Trace &parent_trace,
+                                        uint64_t len, librados::snap_t snap_id,
+                                        int op_flags,
+                                        const ZTracer::Trace &parent_trace,
                                         Context *completion)
   : ObjectRequest<I>(ictx, oid, objectno, offset, len, snap_id, false, "read",
                      parent_trace, completion),
-    m_buffer_extents(be), m_tried_parent(false), m_op_flags(op_flags),
-    m_state(LIBRBD_AIO_READ_FLAT) {
+    m_tried_parent(false), m_op_flags(op_flags), m_state(LIBRBD_AIO_READ_FLAT) {
   guard_read();
 }
 
index aa541aa791fe10ffef92e0c710c242f52ca4f370..65aa59b6a5348dbe68fdbfb5c626fa2da85c34f6 100644 (file)
@@ -150,18 +150,17 @@ public:
 
   static ObjectReadRequest* create(ImageCtxT *ictx, const std::string &oid,
                                    uint64_t objectno, uint64_t offset,
-                                   uint64_t len, Extents &buffer_extents,
-                                   librados::snap_t snap_id, int op_flags,
-                                  const ZTracer::Trace &parent_trace,
+                                   uint64_t len, librados::snap_t snap_id,
+                                   int op_flags,
+                                   const ZTracer::Trace &parent_trace,
                                    Context *completion) {
     return new ObjectReadRequest(ictx, oid, objectno, offset, len,
-                                 buffer_extents, snap_id, op_flags,
-                                parent_trace, completion);
+                                 snap_id, op_flags, parent_trace, completion);
   }
 
   ObjectReadRequest(ImageCtxT *ictx, const std::string &oid,
                     uint64_t objectno, uint64_t offset, uint64_t len,
-                    Extents& buffer_extents, librados::snap_t snap_id,
+                    librados::snap_t snap_id,
                     int op_flags, const ZTracer::Trace &parent_trace,
                     Context *completion);
 
@@ -178,9 +177,6 @@ public:
   ceph::bufferlist &data() {
     return m_read_data;
   }
-  const Extents &get_buffer_extents() const {
-    return m_buffer_extents;
-  }
   ExtentMap &get_extent_map() {
     return m_ext_map;
   }
@@ -194,7 +190,6 @@ public:
   }
 
 private:
-  Extents m_buffer_extents;
   bool m_tried_parent;
   int m_op_flags;
   ceph::bufferlist m_read_data;
index 24a8f256c596bd8855b711a36a97e61c9b007af0..76c9f0c21ca925426c6e0ce4a6423c114df833b7 100644 (file)
@@ -57,14 +57,15 @@ public:
   template <typename ImageCtxT>
   struct C_SparseReadRequest : public C_SparseReadRequestBase {
     ObjectReadRequest<ImageCtxT> *request;
+    Extents buffer_extents;
 
-    C_SparseReadRequest(AioCompletion *aio_completion)
-      : C_SparseReadRequestBase(aio_completion) {
+    C_SparseReadRequest(AioCompletion *aio_completion, Extents&& buffer_extents)
+      : C_SparseReadRequestBase(aio_completion),
+        buffer_extents(std::move(buffer_extents)) {
     }
 
     void finish(int r) override {
-      C_SparseReadRequestBase::finish(request->get_extent_map(),
-                                      request->get_buffer_extents(),
+      C_SparseReadRequestBase::finish(request->get_extent_map(), buffer_extents,
                                       request->get_offset(),
                                       request->get_length(), request->data(),
                                       r);
index 616dbcf27fb3be294a447c94ab9b8f263ee8b2e4..72afd7d72e371f296a3fe55f3b546796cf973a7b 100644 (file)
@@ -149,9 +149,8 @@ TEST_F(TestMockIoObjectRequest, Read) {
   expect_read(mock_image_ctx, "object0", 0, 4096, 0);
 
   C_SaferCond ctx;
-  MockObjectReadRequest::Extents extents{{0, 4096}};
   auto req = MockObjectReadRequest::create(
-    &mock_image_ctx, "object0", 0, 0, 4096, extents, CEPH_NOSNAP, 0, {}, &ctx);
+    &mock_image_ctx, "object0", 0, 0, 4096, CEPH_NOSNAP, 0, {}, &ctx);
   req->send();
   ASSERT_EQ(-ENOENT, ctx.wait());
 }
@@ -176,11 +175,9 @@ TEST_F(TestMockIoObjectRequest, SparseReadThreshold) {
                      ictx->sparse_read_threshold_bytes, 0);
 
   C_SaferCond ctx;
-  MockObjectReadRequest::Extents extents{
-    {0, ictx->sparse_read_threshold_bytes}};
   auto req = MockObjectReadRequest::create(
     &mock_image_ctx, "object0", 0, 0, ictx->sparse_read_threshold_bytes,
-    extents, CEPH_NOSNAP, 0, {}, &ctx);
+    CEPH_NOSNAP, 0, {}, &ctx);
   req->send();
   ASSERT_EQ(-ENOENT, ctx.wait());
 }