From 19fcec84d8d7d21e796c7624e521b60d28ee21ed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 20:45:59 +0200 Subject: Adding upstream version 16.2.11+ds. Signed-off-by: Daniel Baumann --- src/rgw/rgw_compression.h | 63 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/rgw/rgw_compression.h (limited to 'src/rgw/rgw_compression.h') diff --git a/src/rgw/rgw_compression.h b/src/rgw/rgw_compression.h new file mode 100644 index 000000000..cc9386d2c --- /dev/null +++ b/src/rgw/rgw_compression.h @@ -0,0 +1,63 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab ft=cpp + +#ifndef CEPH_RGW_COMPRESSION_H +#define CEPH_RGW_COMPRESSION_H + +#include + +#include "compressor/Compressor.h" +#include "rgw_putobj.h" +#include "rgw_op.h" +#include "rgw_compression_types.h" + +int rgw_compression_info_from_attr(const bufferlist& attr, + bool& need_decompress, + RGWCompressionInfo& cs_info); +int rgw_compression_info_from_attrset(const map& attrs, + bool& need_decompress, + RGWCompressionInfo& cs_info); + +class RGWGetObj_Decompress : public RGWGetObj_Filter +{ + CephContext* cct; + CompressorRef compressor; + RGWCompressionInfo* cs_info; + bool partial_content; + vector::iterator first_block, last_block; + off_t q_ofs, q_len; + uint64_t cur_ofs; + bufferlist waiting; +public: + RGWGetObj_Decompress(CephContext* cct_, + RGWCompressionInfo* cs_info_, + bool partial_content_, + RGWGetObj_Filter* next); + ~RGWGetObj_Decompress() override {} + + int handle_data(bufferlist& bl, off_t bl_ofs, off_t bl_len) override; + int fixup_range(off_t& ofs, off_t& end) override; + +}; + +class RGWPutObj_Compress : public rgw::putobj::Pipe +{ + CephContext* cct; + bool compressed{false}; + CompressorRef compressor; + boost::optional compressor_message; + std::vector blocks; +public: + RGWPutObj_Compress(CephContext* cct_, CompressorRef compressor, + rgw::putobj::DataProcessor *next) + : Pipe(next), cct(cct_), compressor(compressor) {} + + int process(bufferlist&& data, uint64_t logical_offset) override; + + bool is_compressed() { return compressed; } + vector& get_compression_blocks() { return blocks; } + boost::optional get_compressor_message() { return compressor_message; } + +}; /* RGWPutObj_Compress */ + +#endif /* CEPH_RGW_COMPRESSION_H */ -- cgit v1.2.3