From 5f0c2c434fdaa0d8e2a1895b03f063f86deb84d8 Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Tue, 7 May 2019 06:37:52 +0100 Subject: [PATCH] osdc/striper: make possible to assemble sparse read result Signed-off-by: Mykola Golub --- src/osdc/Striper.cc | 15 +++++++++++++++ src/osdc/Striper.h | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/src/osdc/Striper.cc b/src/osdc/Striper.cc index 91c8e05f767..2eff69b38cb 100644 --- a/src/osdc/Striper.cc +++ b/src/osdc/Striper.cc @@ -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 *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(); +} diff --git a/src/osdc/Striper.h b/src/osdc/Striper.h index f7f9b6727f3..12278e1f064 100644 --- a/src/osdc/Striper.h +++ b/src/osdc/Striper.h @@ -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 *extent_map, + ceph::buffer::list *bl); }; }; -- 2.39.5