OPTION(compressor_zlib_isal, OPT_BOOL)
OPTION(compressor_zlib_level, OPT_INT) //regular zlib compression level, not applicable to isa-l optimized version
+OPTION(compressor_zlib_winsize, OPT_INT) //regular zlib compression winsize, not applicable to isa-l optimized version
OPTION(compressor_zstd_level, OPT_INT) //regular zstd compression level
OPTION(qat_compressor_enabled, OPT_BOOL)
.set_default(5)
.set_description("Zlib compression level to use"),
+ Option("compressor_zlib_winsize", Option::TYPE_INT, Option::LEVEL_ADVANCED)
+ .set_default(-15)
+ .set_min_max(-15,32)
+ .set_description("Zlib compression winsize to use"),
+
Option("compressor_zstd_level", Option::TYPE_INT, Option::LEVEL_ADVANCED)
.set_default(1)
.set_description("Zstd compression level to use"),
CompressionAlgorithm get_type() const {
return alg;
}
- virtual int compress(const ceph::bufferlist &in, ceph::bufferlist &out) = 0;
- virtual int decompress(const ceph::bufferlist &in, ceph::bufferlist &out) = 0;
+ virtual int compress(const ceph::bufferlist &in, ceph::bufferlist &out, boost::optional<int32_t> &compressor_message) = 0;
+ virtual int decompress(const ceph::bufferlist &in, ceph::bufferlist &out, boost::optional<int32_t> compressor_message) = 0;
// this is a bit weird but we need non-const iterator to be in
// alignment with decode methods
- virtual int decompress(ceph::bufferlist::const_iterator &p, size_t compressed_len, ceph::bufferlist &out) = 0;
+ virtual int decompress(ceph::bufferlist::const_iterator &p, size_t compressed_len, ceph::bufferlist &out, boost::optional<int32_t> compressor_message) = 0;
static CompressorRef create(CephContext *cct, const std::string &type);
static CompressorRef create(CephContext *cct, int alg);
return true;
}
-int QatAccel::compress(const bufferlist &in, bufferlist &out) {
+int QatAccel::compress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> &compressor_message) {
for (auto &i : in.buffers()) {
const unsigned char* c_in = (unsigned char*) i.c_str();
unsigned int len = i.length();
return 0;
}
-int QatAccel::decompress(const bufferlist &in, bufferlist &out) {
+int QatAccel::decompress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> compressor_message) {
auto i = in.begin();
- return decompress(i, in.length(), out);
+ return decompress(i, in.length(), out, compressor_message);
}
int QatAccel::decompress(bufferlist::const_iterator &p,
size_t compressed_len,
- bufferlist &dst) {
+ bufferlist &dst,
+ boost::optional<int32_t> compressor_message) {
unsigned int ratio_idx = 0;
bool read_more = false;
bool joint = false;
bool init(const std::string &alg);
- int compress(const bufferlist &in, bufferlist &out);
- int decompress(const bufferlist &in, bufferlist &out);
- int decompress(bufferlist::const_iterator &p, size_t compressed_len, bufferlist &dst);
+ int compress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> &compressor_message);
+ int decompress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> compressor_message);
+ int decompress(bufferlist::const_iterator &p, size_t compressed_len, bufferlist &dst, boost::optional<int32_t> compressor_message);
};
#endif
#define MAX_LEN (CEPH_PAGE_SIZE)
-int BrotliCompressor::compress(const bufferlist &in, bufferlist &out)
+int BrotliCompressor::compress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> &compressor_message)
{
BrotliEncoderState* s = BrotliEncoderCreateInstance(nullptr,
nullptr,
int BrotliCompressor::decompress(bufferlist::const_iterator &p,
size_t compressed_size,
- bufferlist &out)
+ bufferlist &out,
+ boost::optional<int32_t> compressor_message)
{
BrotliDecoderState* s = BrotliDecoderCreateInstance(nullptr,
nullptr,
return 0;
}
-int BrotliCompressor::decompress(const bufferlist &in, bufferlist &out)
+int BrotliCompressor::decompress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> compressor_message)
{
auto i = std::cbegin(in);
- return decompress(i, in.length(), out);
+ return decompress(i, in.length(), out, compressor_message);
}
public:
BrotliCompressor() : Compressor(COMP_ALG_BROTLI, "brotli") {}
- int compress(const bufferlist &in, bufferlist &out) override;
- int decompress(const bufferlist &in, bufferlist &out) override;
- int decompress(bufferlist::const_iterator &p, size_t compressed_len, bufferlist &out) override;
+ int compress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> &compressor_message) override;
+ int decompress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> compressor_message) override;
+ int decompress(bufferlist::const_iterator &p, size_t compressed_len, bufferlist &out, boost::optional<int32_t> compressor_message) override;
};
#endif //CEPH_BROTLICOMPRESSOR_H
#endif
}
- int compress(const ceph::buffer::list &src, ceph::buffer::list &dst) override {
+ int compress(const ceph::buffer::list &src, ceph::buffer::list &dst, boost::optional<int32_t> &compressor_message) override {
// older versions of liblz4 introduce bit errors when compressing
// fragmented buffers. this was fixed in lz4 commit
// af127334670a5e7b710bbd6adb71aa7c3ef0cd72, which first
if (!src.is_contiguous()) {
ceph::buffer::list new_src = src;
new_src.rebuild();
- return compress(new_src, dst);
+ return compress(new_src, dst, compressor_message);
}
#ifdef HAVE_QATZIP
if (qat_enabled)
- return qat_accel.compress(src, dst);
+ return qat_accel.compress(src, dst, compressor_message);
#endif
ceph::buffer::ptr outptr = ceph::buffer::create_small_page_aligned(
LZ4_compressBound(src.length()));
return 0;
}
- int decompress(const ceph::buffer::list &src, ceph::buffer::list &dst) override {
+ int decompress(const ceph::buffer::list &src, ceph::buffer::list &dst, boost::optional<int32_t> compressor_message) override {
#ifdef HAVE_QATZIP
if (qat_enabled)
- return qat_accel.decompress(src, dst);
+ return qat_accel.decompress(src, dst, compressor_message);
#endif
auto i = std::cbegin(src);
- return decompress(i, src.length(), dst);
+ return decompress(i, src.length(), dst, compressor_message);
}
int decompress(ceph::buffer::list::const_iterator &p,
size_t compressed_len,
- ceph::buffer::list &dst) override {
+ ceph::buffer::list &dst,
+ boost::optional<int32_t> compressor_message) override {
#ifdef HAVE_QATZIP
if (qat_enabled)
- return qat_accel.decompress(p, compressed_len, dst);
+ return qat_accel.decompress(p, compressed_len, dst, compressor_message);
#endif
using ceph::decode;
uint32_t count;
#endif
}
- int compress(const ceph::bufferlist &src, ceph::bufferlist &dst) override {
+ int compress(const ceph::bufferlist &src, ceph::bufferlist &dst, boost::optional<int32_t> &compressor_message) override {
#ifdef HAVE_QATZIP
if (qat_enabled)
- return qat_accel.compress(src, dst);
+ return qat_accel.compress(src, dst, compressor_message);
#endif
BufferlistSource source(const_cast<ceph::bufferlist&>(src).begin(), src.length());
ceph::bufferptr ptr = ceph::buffer::create_small_page_aligned(
return 0;
}
- int decompress(const ceph::bufferlist &src, ceph::bufferlist &dst) override {
+ int decompress(const ceph::bufferlist &src, ceph::bufferlist &dst, boost::optional<int32_t> compressor_message) override {
#ifdef HAVE_QATZIP
if (qat_enabled)
- return qat_accel.decompress(src, dst);
+ return qat_accel.decompress(src, dst, compressor_message);
#endif
auto i = src.begin();
- return decompress(i, src.length(), dst);
+ return decompress(i, src.length(), dst, compressor_message);
}
int decompress(ceph::bufferlist::const_iterator &p,
size_t compressed_len,
- ceph::bufferlist &dst) override {
+ ceph::bufferlist &dst,
+ boost::optional<int32_t> compressor_message) override {
#ifdef HAVE_QATZIP
if (qat_enabled)
- return qat_accel.decompress(p, compressed_len, dst);
+ return qat_accel.decompress(p, compressed_len, dst, compressor_message);
#endif
snappy::uint32 res_len = 0;
BufferlistSource source_1(p, compressed_len);
// compression ratio.
#define ZLIB_MEMORY_LEVEL 8
-int ZlibCompressor::zlib_compress(const bufferlist &in, bufferlist &out)
+int ZlibCompressor::zlib_compress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> &compressor_message)
{
int ret;
unsigned have;
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
- ret = deflateInit2(&strm, cct->_conf->compressor_zlib_level, Z_DEFLATED, ZLIB_DEFAULT_WIN_SIZE, ZLIB_MEMORY_LEVEL, Z_DEFAULT_STRATEGY);
+ ret = deflateInit2(&strm, cct->_conf->compressor_zlib_level, Z_DEFLATED, cct->_conf->compressor_zlib_winsize, ZLIB_MEMORY_LEVEL, Z_DEFAULT_STRATEGY);
if (ret != Z_OK) {
dout(1) << "Compression init error: init return "
<< ret << " instead of Z_OK" << dendl;
return -1;
}
+ compressor_message = cct->_conf->compressor_zlib_winsize;
for (ceph::bufferlist::buffers_t::const_iterator i = in.buffers().begin();
i != in.buffers().end();) {
}
#if __x86_64__ && defined(HAVE_BETTER_YASM_ELF64)
-int ZlibCompressor::isal_compress(const bufferlist &in, bufferlist &out)
+int ZlibCompressor::isal_compress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> &compressor_message)
{
int ret;
unsigned have;
/* allocate deflate state */
isal_deflate_init(&strm);
strm.end_of_stream = 0;
+ compressor_message = ZLIB_DEFAULT_WIN_SIZE;
for (ceph::bufferlist::buffers_t::const_iterator i = in.buffers().begin();
i != in.buffers().end();) {
}
#endif
-int ZlibCompressor::compress(const bufferlist &in, bufferlist &out)
+int ZlibCompressor::compress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> &compressor_message)
{
#ifdef HAVE_QATZIP
if (qat_enabled)
- return qat_accel.compress(in, out);
+ return qat_accel.compress(in, out, compressor_message);
#endif
#if __x86_64__ && defined(HAVE_BETTER_YASM_ELF64)
if (isal_enabled)
- return isal_compress(in, out);
+ return isal_compress(in, out, compressor_message);
else
- return zlib_compress(in, out);
+ return zlib_compress(in, out, compressor_message);
#else
- return zlib_compress(in, out);
+ return zlib_compress(in, out, compressor_message);
#endif
}
-int ZlibCompressor::decompress(bufferlist::const_iterator &p, size_t compressed_size, bufferlist &out)
+int ZlibCompressor::decompress(bufferlist::const_iterator &p, size_t compressed_size, bufferlist &out, boost::optional<int32_t> compressor_message)
{
#ifdef HAVE_QATZIP
if (qat_enabled)
- return qat_accel.decompress(p, compressed_size, out);
+ return qat_accel.decompress(p, compressed_size, out, compressor_message);
#endif
int ret;
strm.next_in = Z_NULL;
// choose the variation of compressor
- ret = inflateInit2(&strm, ZLIB_DEFAULT_WIN_SIZE);
+ if (!compressor_message)
+ compressor_message = ZLIB_DEFAULT_WIN_SIZE;
+ ret = inflateInit2(&strm, *compressor_message);
if (ret != Z_OK) {
dout(1) << "Decompression init error: init return "
<< ret << " instead of Z_OK" << dendl;
return 0;
}
-int ZlibCompressor::decompress(const bufferlist &in, bufferlist &out)
+int ZlibCompressor::decompress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> compressor_message)
{
#ifdef HAVE_QATZIP
if (qat_enabled)
- return qat_accel.decompress(in, out);
+ return qat_accel.decompress(in, out, compressor_message);
#endif
auto i = std::cbegin(in);
- return decompress(i, in.length(), out);
+ return decompress(i, in.length(), out, compressor_message);
}
#endif
}
- int compress(const ceph::buffer::list &in, ceph::buffer::list &out) override;
- int decompress(const ceph::buffer::list &in, ceph::buffer::list &out) override;
- int decompress(ceph::buffer::list::const_iterator &p, size_t compressed_len, ceph::buffer::list &out) override;
+ int compress(const ceph::buffer::list &in, ceph::buffer::list &out, boost::optional<int32_t> &compressor_message) override;
+ int decompress(const ceph::buffer::list &in, ceph::buffer::list &out, boost::optional<int32_t> compressor_message) override;
+ int decompress(ceph::buffer::list::const_iterator &p, size_t compressed_len, ceph::buffer::list &out, boost::optional<int32_t> compressor_message) override;
private:
- int zlib_compress(const ceph::buffer::list &in, ceph::buffer::list &out);
- int isal_compress(const ceph::buffer::list &in, ceph::buffer::list &out);
+ int zlib_compress(const ceph::buffer::list &in, ceph::buffer::list &out, boost::optional<int32_t> &compressor_message);
+ int isal_compress(const ceph::buffer::list &in, ceph::buffer::list &out, boost::optional<int32_t> &compressor_message);
};
public:
ZstdCompressor(CephContext *cct) : Compressor(COMP_ALG_ZSTD, "zstd"), cct(cct) {}
- int compress(const ceph::buffer::list &src, ceph::buffer::list &dst) override {
+ int compress(const ceph::buffer::list &src, ceph::buffer::list &dst, boost::optional<int32_t> &compressor_message) override {
ZSTD_CStream *s = ZSTD_createCStream();
ZSTD_initCStream_srcSize(s, cct->_conf->compressor_zstd_level, src.length());
auto p = src.begin();
return 0;
}
- int decompress(const ceph::buffer::list &src, ceph::buffer::list &dst) override {
+ int decompress(const ceph::buffer::list &src, ceph::buffer::list &dst, boost::optional<int32_t> compressor_message) override {
auto i = std::cbegin(src);
- return decompress(i, src.length(), dst);
+ return decompress(i, src.length(), dst, compressor_message);
}
int decompress(ceph::buffer::list::const_iterator &p,
size_t compressed_len,
- ceph::buffer::list &dst) override {
+ ceph::buffer::list &dst,
+ boost::optional<int32_t> compressor_message) override {
if (compressed_len < 4) {
return -1;
}
_set_compression_alert(false, alg_name);
r = -EIO;
} else {
- r = cp->decompress(i, chdr.length, *result);
+ r = cp->decompress(i, chdr.length, *result, chdr.compressor_message);
if (r < 0) {
derr << __func__ << " decompression failed with exit code " << r << dendl;
r = -EIO;
// FIXME: memory alignment here is bad
bufferlist t;
- int r = c->compress(wi.bl, t);
+ boost::optional<int32_t> compressor_message;
+ int r = c->compress(wi.bl, t, compressor_message);
uint64_t want_len_raw = wi.blob_length * crr;
uint64_t want_len = p2roundup(want_len_raw, min_alloc_size);
bool rejected = false;
bluestore_compression_header_t chdr;
chdr.type = c->get_type();
chdr.length = t.length();
+ chdr.compressor_message = compressor_message;
encode(chdr, wi.compressed_bl);
wi.compressed_bl.claim_append(t);
{
f->dump_unsigned("type", type);
f->dump_unsigned("length", length);
+ if (compressor_message) {
+ f->dump_int("compressor_message", *compressor_message);
+ }
}
void bluestore_compression_header_t::generate_test_instances(
struct bluestore_compression_header_t {
uint8_t type = Compressor::COMP_ALG_NONE;
uint32_t length = 0;
+ boost::optional<int32_t> compressor_message;
bluestore_compression_header_t() {}
bluestore_compression_header_t(uint8_t _type)
: type(_type) {}
DENC(bluestore_compression_header_t, v, p) {
- DENC_START(1, 1, p);
+ DENC_START(2, 1, p);
denc(v.type, p);
denc(v.length, p);
+ if (struct_v >= 2) {
+ denc(v.compressor_message, p);
+ }
DENC_FINISH(p);
}
void dump(ceph::Formatter *f) const;
if ((logical_offset > 0 && compressed) || // if previous part was compressed
(logical_offset == 0)) { // or it's the first part
ldout(cct, 10) << "Compression for rgw is enabled, compress part " << in.length() << dendl;
- int cr = compressor->compress(in, out);
+ int cr = compressor->compress(in, out, compressor_message);
if (cr < 0) {
if (logical_offset > 0) {
lderr(cct) << "Compression failed with exit code " << cr
iter_in_bl.seek(ofs_in_bl);
}
iter_in_bl.copy(first_block->len, tmp);
- int cr = compressor->decompress(tmp, out_bl);
+ int cr = compressor->decompress(tmp, out_bl, cs_info->compressor_message);
if (cr < 0) {
lderr(cct) << "Decompression failed with exit code " << cr << dendl;
return cr;
CephContext* cct;
bool compressed{false};
CompressorRef compressor;
+ boost::optional<int32_t> compressor_message;
std::vector<compression_block> blocks;
public:
RGWPutObj_Compress(CephContext* cct_, CompressorRef compressor,
bool is_compressed() { return compressed; }
vector<compression_block>& get_compression_blocks() { return blocks; }
+ boost::optional<int32_t> get_compressor_message() { return compressor_message; }
}; /* RGWPutObj_Compress */
struct RGWCompressionInfo {
string compression_type;
uint64_t orig_size;
+ boost::optional<int32_t> compressor_message;
vector<compression_block> blocks;
RGWCompressionInfo() : compression_type("none"), orig_size(0) {}
RGWCompressionInfo(const RGWCompressionInfo& cs_info) : compression_type(cs_info.compression_type),
orig_size(cs_info.orig_size),
+ compressor_message(cs_info.compressor_message),
blocks(cs_info.blocks) {}
void encode(bufferlist& bl) const {
- ENCODE_START(1, 1, bl);
+ ENCODE_START(2, 1, bl);
encode(compression_type, bl);
encode(orig_size, bl);
+ encode(compressor_message, bl);
encode(blocks, bl);
ENCODE_FINISH(bl);
}
void decode(bufferlist::const_iterator& bl) {
- DECODE_START(1, bl);
+ DECODE_START(2, bl);
decode(compression_type, bl);
decode(orig_size, bl);
+ if (struct_v >= 2) {
+ decode(compressor_message, bl);
+ }
decode(blocks, bl);
DECODE_FINISH(bl);
}
{
f->dump_string("compression_type", compression_type);
f->dump_unsigned("orig_size", orig_size);
+ if (compressor_message) {
+ f->dump_int("compressor_message", *compressor_message);
+ }
::encode_json("blocks", blocks, f);
}
RGWCompressionInfo cs_info;
cs_info.compression_type = plugin->get_type_name();
cs_info.orig_size = s->obj_size;
+ cs_info.compressor_message = compressor->get_compressor_message();
cs_info.blocks = move(compressor->get_compression_blocks());
encode(cs_info, tmp);
attrs[RGW_ATTR_COMPRESSION] = tmp;
RGWCompressionInfo cs_info;
cs_info.compression_type = plugin->get_type_name();
cs_info.orig_size = s->obj_size;
+ cs_info.compressor_message = compressor->get_compressor_message();
cs_info.blocks = move(compressor->get_compression_blocks());
encode(cs_info, tmp);
emplace_attr(RGW_ATTR_COMPRESSION, std::move(tmp));
RGWCompressionInfo cs_info;
cs_info.compression_type = plugin->get_type_name();
cs_info.orig_size = s->obj_size;
+ cs_info.compressor_message = compressor->get_compressor_message();
cs_info.blocks = std::move(compressor->get_compression_blocks());
encode(cs_info, tmp);
attrs.emplace(RGW_ATTR_COMPRESSION, std::move(tmp));
RGWCompressionInfo cs_info;
cs_info.compression_type = plugin->get_type_name();
cs_info.orig_size = cb.get_data_len();
+ cs_info.compressor_message = compressor->get_compressor_message();
cs_info.blocks = move(compressor->get_compression_blocks());
encode(cs_info, tmp);
cb.get_attrs()[RGW_ATTR_COMPRESSION] = tmp;
CompressorExample() : Compressor(COMP_ALG_NONE, "example") {}
~CompressorExample() override {}
- int compress(const bufferlist &in, bufferlist &out) override
+ int compress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> &compressor_message) override
{
out = in;
return 0;
}
- int decompress(const bufferlist &in, bufferlist &out) override
+ int decompress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> compressor_message) override
{
out = in;
return 0;
}
- int decompress(bufferlist::const_iterator &p, size_t compressed_len, bufferlist &out) override
+ int decompress(bufferlist::const_iterator &p, size_t compressed_len, bufferlist &out, boost::optional<int32_t> compressor_message) override
{
p.copy(std::min<size_t>(p.get_remaining(), compressed_len), out);
return 0;
bufferlist orig;
orig.append("This is a short string. There are many strings like it but this one is mine.");
bufferlist compressed;
- int r = compressor->compress(orig, compressed);
+ boost::optional<int32_t> compressor_message;
+ int r = compressor->compress(orig, compressed, compressor_message);
ASSERT_EQ(0, r);
bufferlist decompressed;
- r = compressor->decompress(compressed, decompressed);
+ r = compressor->decompress(compressed, decompressed, compressor_message);
ASSERT_EQ(0, r);
ASSERT_EQ(decompressed.length(), orig.length());
ASSERT_TRUE(decompressed.contents_equal(orig));
orig.append("This is a short string. There are many strings like it but this one is mine.");
}
bufferlist compressed;
- int r = compressor->compress(orig, compressed);
+ boost::optional<int32_t> compressor_message;
+ int r = compressor->compress(orig, compressed, compressor_message);
ASSERT_EQ(0, r);
bufferlist decompressed;
- r = compressor->decompress(compressed, decompressed);
+ r = compressor->decompress(compressed, decompressed, compressor_message);
ASSERT_EQ(0, r);
ASSERT_EQ(decompressed.length(), orig.length());
ASSERT_TRUE(decompressed.contents_equal(orig));
orig.append(bp);
}
bufferlist compressed;
- int r = compressor->compress(orig, compressed);
+ boost::optional<int32_t> compressor_message;
+ int r = compressor->compress(orig, compressed, compressor_message);
ASSERT_EQ(0, r);
bufferlist decompressed;
- r = compressor->decompress(compressed, decompressed);
+ r = compressor->decompress(compressed, decompressed, compressor_message);
ASSERT_EQ(0, r);
ASSERT_EQ(decompressed.length(), orig.length());
ASSERT_TRUE(decompressed.contents_equal(orig));
chunk.substr_of(fbl, j*size, l);
//fbl.rebuild();
bufferlist compressed;
- int r = compressor->compress(chunk, compressed);
+ boost::optional<int32_t> compressor_message;
+ int r = compressor->compress(chunk, compressed, compressor_message);
ASSERT_EQ(0, r);
bufferlist decompressed;
- r = compressor->decompress(compressed, decompressed);
+ r = compressor->decompress(compressed, decompressed, compressor_message);
ASSERT_EQ(0, r);
ASSERT_EQ(decompressed.length(), chunk.length());
if (!decompressed.contents_equal(chunk)) {
bufferlist after;
bufferlist exp;
in.append(test, len);
- res = compressor->compress(in, out);
+ boost::optional<int32_t> compressor_message;
+ res = compressor->compress(in, out, compressor_message);
EXPECT_EQ(res, 0);
- res = compressor->decompress(out, after);
+ res = compressor->decompress(out, after, compressor_message);
EXPECT_EQ(res, 0);
exp.append(test);
EXPECT_TRUE(exp.contents_equal(after));
size_t compressed_len = out.length();
out.append_zero(12);
auto it = out.cbegin();
- res = compressor->decompress(it, compressed_len, after);
+ res = compressor->decompress(it, compressed_len, after, compressor_message);
EXPECT_EQ(res, 0);
EXPECT_TRUE(exp.contents_equal(after));
out.clear();
in.append(data);
exp = in;
- res = compressor->compress(in, out);
+ res = compressor->compress(in, out, compressor_message);
EXPECT_EQ(res, 0);
compressed_len = out.length();
out.append_zero(0x10000 - out.length());
out.swap(prefix);
it = out.cbegin();
it += prefix_len;
- res = compressor->decompress(it, compressed_len, after);
+ res = compressor->decompress(it, compressed_len, after, compressor_message);
EXPECT_EQ(res, 0);
EXPECT_TRUE(exp.contents_equal(after));
}
int len = test.size();
bufferlist in, out;
in.append(test.c_str(), len);
- int res = compressor->compress(in, out);
+ boost::optional<int32_t> compressor_message;
+ int res = compressor->compress(in, out, compressor_message);
EXPECT_EQ(res, 0);
EXPECT_GT(out.length(), small_prefix_size);
}
bufferlist after;
- res = compressor->decompress(out2, after);
+ res = compressor->decompress(out2, after, compressor_message);
EXPECT_EQ(res, 0);
}
in.append(data, size);
for (size_t t = 0; t < 10000; t++) {
bufferlist out;
- int res = compressor->compress(in, out);
+ boost::optional<int32_t> compressor_message;
+ int res = compressor->compress(in, out, compressor_message);
EXPECT_EQ(res, 0);
}
free(data);
}
bufferlist in, out;
in.append(data, size);
- int res = compressor->compress(in, out);
+ boost::optional<int32_t> compressor_message;
+ int res = compressor->compress(in, out, compressor_message);
EXPECT_EQ(res, 0);
for (size_t t = 0; t < 10000; t++) {
bufferlist out_dec;
- int res = compressor->decompress(out, out_dec);
+ int res = compressor->decompress(out, out_dec, compressor_message);
EXPECT_EQ(res, 0);
}
free(data);
bufferlist in, out;
in.append(test, len);
// isal -> zlib
- int res = isal->compress(in, out);
+ boost::optional<int32_t> compressor_message;
+ int res = isal->compress(in, out, compressor_message);
EXPECT_EQ(res, 0);
bufferlist after;
- res = zlib->decompress(out, after);
+ res = zlib->decompress(out, after, compressor_message);
EXPECT_EQ(res, 0);
bufferlist exp;
exp.append(static_cast<char*>(test));
out.clear();
exp.clear();
// zlib -> isal
- res = zlib->compress(in, out);
+ res = zlib->compress(in, out, compressor_message);
EXPECT_EQ(res, 0);
- res = isal->decompress(out, after);
+ res = isal->decompress(out, after, compressor_message);
EXPECT_EQ(res, 0);
exp.append(static_cast<char*>(test));
EXPECT_TRUE(exp.contents_equal(after));
bufferlist in, out;
in.append(test, size);
- int res = isal->compress(in, out);
+ boost::optional<int32_t> compressor_message;
+ int res = isal->compress(in, out, compressor_message);
EXPECT_EQ(res, 0);
bufferlist after;
- res = zlib->decompress(out, after);
+ res = zlib->decompress(out, after, compressor_message);
EXPECT_EQ(res, 0);
bufferlist exp;
exp.append(test, size);
bufferlist in, out;
in.append(test, size);
- int res = isal->compress(in, out);
+ boost::optional<int32_t> compressor_message;
+ int res = isal->compress(in, out, compressor_message);
EXPECT_EQ(res, 0);
bufferlist after;
- res = zlib->decompress(out, after);
+ res = zlib->decompress(out, after, compressor_message);
EXPECT_EQ(res, 0);
bufferlist exp;
exp.append(test, size);
bufferlist in, out;
in.append(test, size);
- int res = q->compress(in, out);
+ boost::optional<int32_t> compressor_message;
+ int res = q->compress(in, out, compressor_message);
EXPECT_EQ(res, 0);
bufferlist after;
- res = noq->decompress(out, after);
+ res = noq->decompress(out, after, compressor_message);
EXPECT_EQ(res, 0);
bufferlist exp;
exp.append(test, size);
bufferlist in, out;
in.append(test, size);
- int res = noq->compress(in, out);
+ boost::optional<int32_t> compressor_message;
+ int res = noq->compress(in, out, compressor_message);
EXPECT_EQ(res, 0);
bufferlist after;
- res = q->decompress(out, after);
+ res = q->decompress(out, after, compressor_message);
EXPECT_EQ(res, 0);
bufferlist exp;
exp.append(test, size);
RGWCompressionInfo cs_info;
cs_info.compression_type = plugin->get_type_name();
cs_info.orig_size = s;
+ cs_info.compressor_message = compressor.get_compressor_message();
cs_info.blocks = move(compressor.get_compression_blocks());
ut_get_sink_size d_sink;
RGWCompressionInfo cs_info;
cs_info.compression_type = plugin->get_type_name();
cs_info.orig_size = size*1000;
+ cs_info.compressor_message = compressor.get_compressor_message();
cs_info.blocks = move(compressor.get_compression_blocks());
ut_get_sink d_sink;