diff --git a/src/compressor/brotli/BrotliCompressor.cc b/src/compressor/brotli/BrotliCompressor.cc index c146f64925ecde..b9c1d1d52674e2 100644 --- a/src/compressor/brotli/BrotliCompressor.cc +++ b/src/compressor/brotli/BrotliCompressor.cc @@ -7,32 +7,35 @@ int BrotliCompressor::compress(const bufferlist &in, bufferlist &out) { - BrotliEncoderState* s = BrotliEncoderCreateInstance(nullptr, nullptr, nullptr); - auto sg = make_scope_guard([&s] { BrotliEncoderDestroyInstance(s); }); - size_t available_in = 0; - const uint8_t* next_in = nullptr; - size_t available_out = 0; - uint8_t* next_out = nullptr; + BrotliEncoderState* s = BrotliEncoderCreateInstance(nullptr, + nullptr, + nullptr); if (!s) { - return -1; + return -1; } + auto sg = make_scope_guard([&s] { BrotliEncoderDestroyInstance(s); }); BrotliEncoderSetParameter(s, BROTLI_PARAM_QUALITY, (uint32_t)9); BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, 22); - unsigned char* c_in; for (auto i = in.buffers().begin(); i != in.buffers().end();) { - c_in = (unsigned char*) i->c_str(); - size_t len = i->length(); - available_in = len; - next_in = c_in; + size_t available_in = i->length(); + size_t max_comp_size = BrotliEncoderMaxCompressedSize(available_in); + size_t available_out = max_comp_size; + bufferptr ptr = buffer::create_page_aligned(max_comp_size); + uint8_t* next_out = (uint8_t*)ptr.c_str(); + const uint8_t* next_in = (uint8_t*)i->c_str(); ++i; - BrotliEncoderOperation finish = i != in.buffers().end() ? BROTLI_OPERATION_PROCESS : BROTLI_OPERATION_FINISH; + BrotliEncoderOperation finish = i != in.buffers().end() ? + BROTLI_OPERATION_PROCESS : + BROTLI_OPERATION_FINISH; do { - size_t max_comp_size = BrotliEncoderMaxCompressedSize(available_in); - bufferptr ptr = buffer::create_page_aligned(max_comp_size); - next_out = (unsigned char*)ptr.c_str(); - available_out = max_comp_size; - if (!BrotliEncoderCompressStream(s,finish,&available_in, &next_in, &available_out, &next_out, nullptr)) { - return -1; + if (!BrotliEncoderCompressStream(s, + finish, + &available_in, + &next_in, + &available_out, + &next_out, + nullptr)) { + return -1; } unsigned have = max_comp_size - available_out; out.append(ptr, 0, have); @@ -44,34 +47,40 @@ int BrotliCompressor::compress(const bufferlist &in, bufferlist &out) return 0; } -int BrotliCompressor::decompress(bufferlist::iterator &p, size_t compressed_size, bufferlist &out) +int BrotliCompressor::decompress(bufferlist::iterator &p, + size_t compressed_size, + bufferlist &out) { - const char* c_in; - size_t available_in = 0; - const uint8_t* next_in = nullptr; - size_t available_out = 0; - uint8_t* next_out = nullptr; - BrotliDecoderState* s = BrotliDecoderCreateInstance(nullptr, nullptr, nullptr); - auto sg = make_scope_guard([&s] { BrotliDecoderDestroyInstance(s); }); - size_t remaining = std::min(p.get_remaining(), compressed_size); + BrotliDecoderState* s = BrotliDecoderCreateInstance(nullptr, + nullptr, + nullptr); if (!s) { return -1; } + auto sg = make_scope_guard([&s] { BrotliDecoderDestroyInstance(s); }); + size_t remaining = std::min(p.get_remaining(), compressed_size); while (remaining) { - size_t len = p.get_ptr_and_advance(remaining, &c_in); + const uint8_t* next_in; + size_t len = p.get_ptr_and_advance(remaining, (const char**)&next_in); remaining -= len; - available_in = len; - next_in = (unsigned char*)c_in; + size_t available_in = len; + BrotliDecoderResult result = BROTLI_DECODER_RESULT_ERROR; do { - available_out = MAX_LEN; + size_t available_out = MAX_LEN; bufferptr ptr = buffer::create_page_aligned(MAX_LEN); - next_out = (unsigned char*)ptr.c_str(); - if (!BrotliDecoderDecompressStream(s, &available_in, &next_in, &available_out, &next_out, 0)) { + uint8_t* next_out = (uint8_t*)ptr.c_str(); + result = BrotliDecoderDecompressStream(s, + &available_in, + &next_in, + &available_out, + &next_out, + 0); + if (!result) { return -1; } unsigned have = MAX_LEN - available_out; out.append(ptr, 0, have); - } while (available_out == 0); + } while (result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT); if (BrotliDecoderIsFinished(s)) { break; } diff --git a/src/compressor/brotli/CompressionPluginBrotli.cc b/src/compressor/brotli/CompressionPluginBrotli.cc index dc4bb1a0606a79..9b11209f3e7c82 100644 --- a/src/compressor/brotli/CompressionPluginBrotli.cc +++ b/src/compressor/brotli/CompressionPluginBrotli.cc @@ -9,7 +9,9 @@ const char *__ceph_plugin_version() return CEPH_GIT_NICE_VER; } -int __ceph_plugin_init(CephContext *cct, const std::string& type, const std::string& name) +int __ceph_plugin_init(CephContext *cct, + const std::string& type, + const std::string& name) { PluginRegistry *instance = cct->get_plugin_registry(); return instance->add(type, name, new CompressionPluginBrotli(cct)); diff --git a/src/test/compressor/test_compression.cc b/src/test/compressor/test_compression.cc index f85dc11791d0b7..bba0ca0c61238c 100644 --- a/src/test/compressor/test_compression.cc +++ b/src/test/compressor/test_compression.cc @@ -333,8 +333,7 @@ INSTANTIATE_TEST_CASE_P( #ifdef HAVE_BROTLI "brotli", #endif - "zstd" - )); + "zstd")); #ifdef __x86_64__