MCPcopy Create free account
hub / github.com/apache/impala / TryCompress

Method TryCompress

be/src/runtime/tmp-file-mgr.cc:2015–2049  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2013}
2014
2015bool TmpWriteHandle::TryCompress(
2016 MemRange buffer, const BufferPoolClientCounters* counters) {
2017 DCHECK(parent_->tmp_file_mgr_->compression_enabled());
2018 SCOPED_TIMER2(parent_->compression_timer_,
2019 counters == nullptr ? nullptr : counters->compression_time);
2020 DCHECK_LT(compressed_len_, 0);
2021 DCHECK(compressed_.buffer() == nullptr);
2022 scoped_ptr<Codec> compressor;
2023 Status status = Codec::CreateCompressor(nullptr, false,
2024 Codec::CodecInfo(parent_->tmp_file_mgr_->compression_codec(),
2025 parent_->tmp_file_mgr_->compression_level()),
2026 &compressor);
2027 if (!status.ok()) {
2028 LOG(WARNING) << "Failed to compress, couldn't create compressor: "
2029 << status.GetDetail();
2030 return false;
2031 }
2032 int64_t compressed_buffer_len = compressor->MaxOutputLen(buffer.len());
2033 if (!compressed_.TryAllocate(compressed_buffer_len)) {
2034 LOG_EVERY_N(INFO, 100) << "Failed to compress: couldn't allocate "
2035 << PrettyPrinter::PrintBytes(compressed_buffer_len);
2036 return false;
2037 }
2038 uint8_t* compressed_buffer = compressed_.buffer();
2039 int64_t compressed_len = compressed_buffer_len;
2040 status = compressor->ProcessBlock(
2041 true, buffer.len(), buffer.data(), &compressed_len, &compressed_buffer);
2042 if (!status.ok()) {
2043 compressed_.Release();
2044 return false;
2045 }
2046 compressed_len_ = compressed_len;
2047 VLOG(3) << "Buffer size: " << buffer.len() << " compressed size: " << compressed_len;
2048 return true;
2049}
2050
2051Status TmpWriteHandle::RetryWrite(RequestContext* io_ctx, TmpFile* file, int64_t offset) {
2052 DCHECK(write_in_flight_);

Callers

nothing calls this directly

Calls 14

CodecInfoClass · 0.85
PrintBytesFunction · 0.85
compression_enabledMethod · 0.80
compression_codecMethod · 0.80
compression_levelMethod · 0.80
GetDetailMethod · 0.80
bufferMethod · 0.45
okMethod · 0.45
MaxOutputLenMethod · 0.45
lenMethod · 0.45
TryAllocateMethod · 0.45
ProcessBlockMethod · 0.45

Tested by

no test coverage detected