| 121 | } |
| 122 | |
| 123 | void BaseSequenceScanner::Close(RowBatch* row_batch) { |
| 124 | DCHECK(!is_closed_); |
| 125 | VLOG_FILE << "Bytes read past scan range: " << (stream_ == nullptr ? 0 : |
| 126 | -stream_->bytes_left()); |
| 127 | VLOG_FILE << "Average block size: " |
| 128 | << (num_syncs_ > 1 ? total_block_size_ / (num_syncs_ - 1) : 0); |
| 129 | // Need to close the decompressor before releasing the resources at AddFinalRowBatch(), |
| 130 | // because in some cases there is memory allocated in decompressor_'s temp_memory_pool_. |
| 131 | if (decompressor_.get() != nullptr) { |
| 132 | decompressor_->Close(); |
| 133 | decompressor_.reset(); |
| 134 | } |
| 135 | if (row_batch != nullptr) { |
| 136 | row_batch->tuple_data_pool()->AcquireData(data_buffer_pool_.get(), false); |
| 137 | row_batch->tuple_data_pool()->AcquireData(template_tuple_pool_.get(), false); |
| 138 | if (scan_node_->HasRowBatchQueue()) { |
| 139 | static_cast<HdfsScanNode*>(scan_node_)->AddMaterializedRowBatch( |
| 140 | unique_ptr<RowBatch>(row_batch)); |
| 141 | } |
| 142 | } else { |
| 143 | data_buffer_pool_->FreeAll(); |
| 144 | template_tuple_pool_->FreeAll(); |
| 145 | } |
| 146 | context_->ReleaseCompletedResources(true); |
| 147 | |
| 148 | // Verify all resources (if any) have been transferred. |
| 149 | DCHECK_EQ(template_tuple_pool_.get()->total_allocated_bytes(), 0); |
| 150 | DCHECK_EQ(data_buffer_pool_.get()->total_allocated_bytes(), 0); |
| 151 | // 'header_' can be nullptr if HdfsScanNodeBase::CreateAndOpenScanner() failed. |
| 152 | if (!only_parsing_header_ && header_ != nullptr) { |
| 153 | scan_node_->RangeComplete(file_format(), header_->compression_type); |
| 154 | } |
| 155 | CloseInternal(); |
| 156 | } |
| 157 | |
| 158 | Status BaseSequenceScanner::GetNextInternal(RowBatch* row_batch) { |
| 159 | if (only_parsing_header_) { |
nothing calls this directly
no test coverage detected