MCPcopy Create free account
hub / github.com/apache/impala / GetQueryStatus

Method GetQueryStatus

be/src/scheduling/admission-control-service.cc:193–265  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

191}
192
193void AdmissionControlService::GetQueryStatus(const GetQueryStatusRequestPB* req,
194 GetQueryStatusResponsePB* resp, kudu::rpc::RpcContext* rpc_context) {
195 VLOG(2) << "GetQueryStatus " << req->query_id();
196
197 shared_ptr<AdmissionState> admission_state;
198 RESPOND_IF_ERROR(admission_state_map_.Get(req->query_id(), &admission_state));
199
200 Status status = Status::OK();
201 {
202 lock_guard<mutex> l(admission_state->lock);
203 if (admission_state->submitted) {
204 if (!admission_state->admission_done) {
205 bool timed_out;
206 int64_t wait_start_time_ms, wait_end_time_ms;
207 admission_state->admit_status =
208 AdmissiondEnv::GetInstance()->admission_controller()->WaitOnQueued(
209 req->query_id(), &admission_state->schedule,
210 FLAGS_admission_status_wait_time_ms, &timed_out,
211 &wait_start_time_ms, &wait_end_time_ms);
212 resp->set_wait_start_time_ms(wait_start_time_ms);
213 resp->set_wait_end_time_ms(wait_end_time_ms);
214 if (!timed_out) {
215 admission_state->admission_done = true;
216 if (admission_state->admit_status.ok()) {
217 for (const auto& entry : admission_state->schedule->backend_exec_params()) {
218 admission_state->unreleased_backends.emplace(entry.address());
219 }
220 }
221 } else {
222 DCHECK(admission_state->admit_status.ok());
223 }
224 }
225
226 if (admission_state->admission_done) {
227 if (admission_state->admit_status.ok()) {
228 *resp->mutable_query_schedule() = *admission_state->schedule.get();
229 // Free TQueryExecRequest since it's not required after admission is done
230 admission_state->ReleaseQueryExecRequest();
231 } else {
232 status = admission_state->admit_status;
233 }
234 }
235
236 // Always send the profile even if admission isn't done yet.
237 TRuntimeProfileTree tree;
238 admission_state->summary_profile->ToThrift(&tree);
239 int sidecar_idx;
240 int64_t sidecar_length = 0;
241 Status sidecar_status = SetFaststringSidecar(tree, rpc_context, &sidecar_idx,
242 &sidecar_length);
243 if (!sidecar_status.ok()) {
244 // We don't need to fail the query just because we can't return the profile, so
245 // just log the error.
246 LOG(WARNING) << "Failed to set profile sidecar in GetQueryStatus: "
247 << sidecar_status;
248 } else {
249 resp->set_summary_profile_sidecar_idx(sidecar_idx);
250 }

Callers 1

SubmitForAdmissionMethod · 0.45

Calls 11

OKFunction · 0.85
SetFaststringSidecarFunction · 0.85
WaitOnQueuedMethod · 0.80
getMethod · 0.65
query_idMethod · 0.45
GetMethod · 0.45
admission_controllerMethod · 0.45
okMethod · 0.45
ToThriftMethod · 0.45
CountMethod · 0.45

Tested by

no test coverage detected