]>
git.proxmox.com Git - ceph.git/blob - ceph/src/rgw/rgw_compression.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab ft=cpp
4 #ifndef CEPH_RGW_COMPRESSION_H
5 #define CEPH_RGW_COMPRESSION_H
9 #include "compressor/Compressor.h"
10 #include "rgw_putobj.h"
12 #include "rgw_compression_types.h"
14 int rgw_compression_info_from_attr(const bufferlist
& attr
,
15 bool& need_decompress
,
16 RGWCompressionInfo
& cs_info
);
17 int rgw_compression_info_from_attrset(const std::map
<std::string
, bufferlist
>& attrs
,
18 bool& need_decompress
,
19 RGWCompressionInfo
& cs_info
);
21 class RGWGetObj_Decompress
: public RGWGetObj_Filter
24 CompressorRef compressor
;
25 RGWCompressionInfo
* cs_info
;
27 std::vector
<compression_block
>::iterator first_block
, last_block
;
32 RGWGetObj_Decompress(CephContext
* cct_
,
33 RGWCompressionInfo
* cs_info_
,
34 bool partial_content_
,
35 RGWGetObj_Filter
* next
);
36 ~RGWGetObj_Decompress() override
{}
38 int handle_data(bufferlist
& bl
, off_t bl_ofs
, off_t bl_len
) override
;
39 int fixup_range(off_t
& ofs
, off_t
& end
) override
;
43 class RGWPutObj_Compress
: public rgw::putobj::Pipe
46 bool compressed
{false};
47 CompressorRef compressor
;
48 boost::optional
<int32_t> compressor_message
;
49 std::vector
<compression_block
> blocks
;
51 RGWPutObj_Compress(CephContext
* cct_
, CompressorRef compressor
,
52 rgw::sal::DataProcessor
*next
)
53 : Pipe(next
), cct(cct_
), compressor(compressor
) {}
55 int process(bufferlist
&& data
, uint64_t logical_offset
) override
;
57 bool is_compressed() { return compressed
; }
58 std::vector
<compression_block
>& get_compression_blocks() { return blocks
; }
59 boost::optional
<int32_t> get_compressor_message() { return compressor_message
; }
61 }; /* RGWPutObj_Compress */
63 #endif /* CEPH_RGW_COMPRESSION_H */