From f04f4dc9831d8ddfcd40e7ff9f0b4e620b9d8c04 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Thu, 11 Aug 2016 13:45:30 +0200 Subject: [PATCH] rgw: RGWStreamIOReorderingEngine understands send_header(). Signed-off-by: Radoslaw Zarzynski --- src/rgw/rgw_client_io_decoimpl.h | 48 ++++++++------------------------ 1 file changed, 11 insertions(+), 37 deletions(-) diff --git a/src/rgw/rgw_client_io_decoimpl.h b/src/rgw/rgw_client_io_decoimpl.h index d41da6060191..24f8020d7280 100644 --- a/src/rgw/rgw_client_io_decoimpl.h +++ b/src/rgw/rgw_client_io_decoimpl.h @@ -385,20 +385,18 @@ protected: boost::optional content_length; - ceph::bufferlist early_header_data; - ceph::bufferlist header_data; + std::vector> headers; - std::size_t write_data(const char* const buf, - const std::size_t len) override { + std::size_t send_header(const boost::string_ref& name, + const boost::string_ref& value) override { switch (phase) { case ReorderState::RGW_EARLY_HEADERS: - early_header_data.append(buf, len); - return len; case ReorderState::RGW_STATUS_SEEN: - header_data.append(buf, len); - return len; + headers.emplace_back(std::make_pair(name.to_string(), + value.to_string())); + return 0; case ReorderState::RGW_DATA: - return RGWDecoratedStreamIO::write_data(buf, len); + return RGWDecoratedStreamIO::send_header(name, value); } return -EIO; @@ -436,38 +434,14 @@ public: /* Sent content length if necessary. */ if (content_length) { - ssize_t rc = RGWDecoratedStreamIO::send_content_length(*content_length); - if (rc < 0) { - return rc; - } else { - sent += rc; - } + sent += RGWDecoratedStreamIO::send_content_length(*content_length); } /* Header data in buffers are already counted. */ - if (header_data.length()) { - ssize_t rc = RGWDecoratedStreamIO::write_data(header_data.c_str(), - header_data.length()); - if (rc < 0) { - return rc; - } else { - sent += rc; - } - - header_data.clear(); - } - - if (early_header_data.length()) { - ssize_t rc = RGWDecoratedStreamIO::write_data(early_header_data.c_str(), - early_header_data.length()); - if (rc < 0) { - return rc; - } else { - sent += rc; - } - - early_header_data.clear(); + for (const auto& kv : headers) { + sent += RGWDecoratedStreamIO::send_header(kv.first, kv.second); } + headers.clear(); return sent + RGWDecoratedStreamIO::complete_header(); } -- 2.47.3