| 1521 | } |
| 1522 | |
| 1523 | void Coordinator::ReleaseQueryAdmissionControlResources() { |
| 1524 | DCHECK(exec_rpcs_complete_.Load()) << "Exec() must be called first"; |
| 1525 | vector<BackendState*> unreleased_backends = |
| 1526 | backend_resource_state_->CloseAndGetUnreleasedBackends(); |
| 1527 | if (!unreleased_backends.empty()) { |
| 1528 | ReleaseBackendAdmissionControlResources(unreleased_backends); |
| 1529 | backend_resource_state_->BackendsReleased(unreleased_backends); |
| 1530 | for (int i = 0; i < unreleased_backends.size(); ++i) { |
| 1531 | backend_released_barrier_.Notify(); |
| 1532 | } |
| 1533 | } |
| 1534 | // Wait for all backends to be released before calling |
| 1535 | // AdmissionController::ReleaseQuery. |
| 1536 | backend_released_barrier_.Wait(); |
| 1537 | LOG(INFO) << "Release admission control resources for query_id=" << PrintId(query_id()); |
| 1538 | AdmissionControlClient* admission_control_client = |
| 1539 | parent_request_state_->admission_control_client(); |
| 1540 | DCHECK(admission_control_client != nullptr); |
| 1541 | admission_control_client->ReleaseQuery( |
| 1542 | ComputeQueryResourceUtilization().peak_per_host_mem_consumption); |
| 1543 | query_events_->MarkEvent("Released admission control resources"); |
| 1544 | if (parent_request_state_->otel_trace_query()) { |
| 1545 | parent_request_state_->otel_trace_manager()->AddChildSpanEvent( |
| 1546 | "ReleasedAdmissionControlResources"); |
| 1547 | } |
| 1548 | } |
| 1549 | |
| 1550 | void Coordinator::ReleaseBackendAdmissionControlResources( |
| 1551 | const vector<BackendState*>& backend_states) { |
nothing calls this directly
no test coverage detected