]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osdc/striper: make possible to assemble sparse read result
authorMykola Golub <mgolub@suse.com>
Tue, 7 May 2019 05:37:52 +0000 (06:37 +0100)
committerMykola Golub <mgolub@suse.com>
Thu, 9 May 2019 17:11:46 +0000 (18:11 +0100)
Signed-off-by: Mykola Golub <mgolub@suse.com>
src/osdc/Striper.cc
src/osdc/Striper.h

index 91c8e05f767a6348ff714ef36698a5b1a8b91015..2eff69b38cba7db1b098c019f50df3d3fdf9375f 100644 (file)
@@ -402,3 +402,18 @@ void Striper::StripedReadResult::assemble_result(CephContext *cct, char *buffer,
   ceph_assert(curr == 0);
 }
 
+void Striper::StripedReadResult::assemble_result(
+    CephContext *cct, std::map<uint64_t, uint64_t> *extent_map,
+    bufferlist *bl)
+{
+  ldout(cct, 10) << "assemble_result(" << this << ")" << dendl;
+  for (auto& p : partial) {
+    uint64_t off = p.first;
+    uint64_t len = p.second.first.length();
+    if (len > 0) {
+      (*extent_map)[off] = len;
+      bl->claim_append(p.second.first);
+    }
+  }
+  partial.clear();
+}
index f7f9b6727f31c065f5ac913393702f4fd6cb6a39..12278e1f0642e989e4462b068ab7179911a4ea45 100644 (file)
@@ -104,6 +104,10 @@ class CephContext;
        * @len the length of buffer
        */
       void assemble_result(CephContext *cct, char *buffer, size_t len);
+
+      void assemble_result(CephContext *cct,
+                           std::map<uint64_t, uint64_t> *extent_map,
+                           ceph::buffer::list *bl);
     };
 
   };