| 2279 | } |
| 2280 | |
| 2281 | Status TmpFileBufferPool::MoveWriteRangesHelper(DiskFile* disk_file, |
| 2282 | vector<TmpFileMgr::WriteDoneCallback>* write_callbacks, bool is_cancelled) { |
| 2283 | Status status = Status::OK(); |
| 2284 | auto write_ranges_it = write_ranges_to_add_.find(disk_file); |
| 2285 | if (write_ranges_it != write_ranges_to_add_.end()) { |
| 2286 | auto write_range_it = write_ranges_it->second.begin(); |
| 2287 | while (write_range_it != write_ranges_it->second.end()) { |
| 2288 | auto range = *write_range_it; |
| 2289 | DCHECK(range != nullptr); |
| 2290 | if (status.ok() && !is_cancelled) { |
| 2291 | status = range->io_ctx()->AddWriteRange(range); |
| 2292 | } else { |
| 2293 | write_callbacks->push_back(range->callback()); |
| 2294 | if (is_cancelled && range->offset() == 0) { |
| 2295 | // If is_cancelled is set, try to remove the range from the write_ranges list. |
| 2296 | // If the range hasn't been popped, it must still be in the write_ranges list. |
| 2297 | if (cur_write_range_ != range) { |
| 2298 | auto key_range_it = write_ranges_iterator_.find(range); |
| 2299 | DCHECK(key_range_it != write_ranges_iterator_.end()); |
| 2300 | DCHECK_EQ(*(key_range_it->second.first), range); |
| 2301 | write_ranges_.erase(key_range_it->second.first); |
| 2302 | write_ranges_iterator_.erase(key_range_it); |
| 2303 | } |
| 2304 | } |
| 2305 | } |
| 2306 | write_range_it = write_ranges_it->second.erase(write_range_it); |
| 2307 | } |
| 2308 | write_ranges_to_add_.erase(write_ranges_it); |
| 2309 | } |
| 2310 | return status; |
| 2311 | } |
| 2312 | |
| 2313 | Status TmpFileBufferPool::EnqueueWriteRange(io::WriteRange* range, TmpFile* tmp_file) { |
| 2314 | Status status = Status::OK(); |