| 2013 | } |
| 2014 | |
| 2015 | bool 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 | |
| 2051 | Status TmpWriteHandle::RetryWrite(RequestContext* io_ctx, TmpFile* file, int64_t offset) { |
| 2052 | DCHECK(write_in_flight_); |
nothing calls this directly
no test coverage detected