]>
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 map
<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 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 std::vector
<compression_block
> blocks
;
50 RGWPutObj_Compress(CephContext
* cct_
, CompressorRef compressor
,
51 rgw::putobj::DataProcessor
*next
)
52 : Pipe(next
), cct(cct_
), compressor(compressor
) {}
54 int process(bufferlist
&& data
, uint64_t logical_offset
) override
;
56 bool is_compressed() { return compressed
; }
57 vector
<compression_block
>& get_compression_blocks() { return blocks
; }
59 }; /* RGWPutObj_Compress */
61 #endif /* CEPH_RGW_COMPRESSION_H */