Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix code
Signed-off-by: BI SHUN KE <aionshun@livemail.tw>
  • Loading branch information
bi-shun committed Dec 29, 2017
1 parent db1b72f commit a496ad7
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 38 deletions.
79 changes: 44 additions & 35 deletions src/compressor/brotli/BrotliCompressor.cc
Expand Up @@ -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);
Expand All @@ -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<size_t>(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<size_t>(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;
}
Expand Down
4 changes: 3 additions & 1 deletion src/compressor/brotli/CompressionPluginBrotli.cc
Expand Up @@ -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));
Expand Down
3 changes: 1 addition & 2 deletions src/test/compressor/test_compression.cc
Expand Up @@ -333,8 +333,7 @@ INSTANTIATE_TEST_CASE_P(
#ifdef HAVE_BROTLI
"brotli",
#endif
"zstd"
));
"zstd"));

#ifdef __x86_64__

Expand Down

0 comments on commit a496ad7

Please sign in to comment.