| 439 | } |
| 440 | |
| 441 | void AdmissionControlService::AdmissionStateMapCleanupLoop() { |
| 442 | std::unique_lock<std::mutex> lock(cleanup_queue_lock_); |
| 443 | while (true) { |
| 444 | cleanup_queue_cv_.wait(lock, |
| 445 | [&] { return !admission_state_cleanup_queue_.empty() || shutdown_.load(); }); |
| 446 | if (admission_state_cleanup_queue_.empty() && shutdown_.load()) return; |
| 447 | std::deque<std::pair<UniqueIdPB, const char*>> local_queue; |
| 448 | std::swap(local_queue, admission_state_cleanup_queue_); |
| 449 | lock.unlock(); |
| 450 | for (const auto& entry : local_queue) { |
| 451 | discard_result(admission_state_map_.Delete(entry.first)); |
| 452 | VLOG_QUERY << "Cleaned up admission state map for query=" << PrintId(entry.first) |
| 453 | << ", triggered by function: " << entry.second; |
| 454 | } |
| 455 | lock.lock(); |
| 456 | } |
| 457 | } |
| 458 | |
| 459 | } // namespace impala |