@Override public QueryId getQueryId() { return queryInfo.getQueryId(); }
private Optional<String> createTextQueryPlan(QueryInfo queryInfo) { try { if (queryInfo.getOutputStage().isPresent()) { return Optional.of(textDistributedPlan( queryInfo.getOutputStage().get(), functionRegistry, queryInfo.getSession().toSession(sessionPropertyManager), false)); } } catch (Exception e) { // Sometimes it is expected to fail. For example if generated plan is too long. // Don't fail to create event if the plan can not be created. log.warn(e, "Error creating explain plan for query %s", queryInfo.getQueryId()); } return Optional.empty(); }
queryInfo.getQueryId(), queryInfo.getSession().getTransactionId().map(TransactionId::toString).orElse(""), elapsed,
private QueryMetadata createQueryMetadata(QueryInfo queryInfo) { return new QueryMetadata( queryInfo.getQueryId().toString(), queryInfo.getSession().getTransactionId().map(TransactionId::toString), queryInfo.getQuery(), queryInfo.getState().toString(), queryInfo.getSelf(), createTextQueryPlan(queryInfo), queryInfo.getOutputStage().flatMap(stage -> stageInfoCodec.toJsonWithLengthLimit(stage, maxJsonLimit))); }
log.warn("Query %s in state %s has no failure info", queryInfo.getQueryId(), state); failure = toFailure(new RuntimeException(format("Query is %s (reason unknown)", state))).toFailureInfo(); log.warn("Failed query %s has no error code", queryInfo.getQueryId());
QueryStats queryStats = queryInfo.getQueryStats(); table.addRow( queryInfo.getQueryId().toString(), queryInfo.getState().toString(), queryInfo.getSession().getUser(),
public BasicQueryInfo(QueryInfo queryInfo) { this(queryInfo.getQueryId(), queryInfo.getSession(), queryInfo.getResourceGroupId(), queryInfo.getState(), queryInfo.getMemoryPool(), queryInfo.isScheduled(), queryInfo.getSelf(), queryInfo.getQuery(), new BasicQueryStats(queryInfo.getQueryStats()), queryInfo.getErrorType(), queryInfo.getErrorCode()); }
queryInfo.getQueryId(), queryInfo.getSession(), queryInfo.getState(),
assertEquals(queryInfo.getQueryId(), TEST_SESSION.getQueryId()); assertEquals(queryInfo.getSelf(), LOCATION); assertFalse(queryInfo.getOutputStage().isPresent());
@Override public QueryId getQueryId() { return queryInfo.getQueryId(); }
public Query(Session session, String query, QueryManager queryManager, ExchangeClient exchangeClient) { requireNonNull(session, "session is null"); requireNonNull(query, "query is null"); requireNonNull(queryManager, "queryManager is null"); requireNonNull(exchangeClient, "exchangeClient is null"); this.session = session; this.queryManager = queryManager; QueryInfo queryInfo = queryManager.createQuery(session, query); queryId = queryInfo.getQueryId(); this.exchangeClient = exchangeClient; }
@POST @Produces(MediaType.APPLICATION_JSON) public Response createQuery( String statement, @Context HttpServletRequest servletRequest, @Context UriInfo uriInfo) { assertRequest(!isNullOrEmpty(statement), "SQL statement is empty"); Session session = createSessionForRequest(servletRequest, accessControl, sessionPropertyManager, queryIdGenerator.createNextQueryId()); QueryInfo queryInfo = queryManager.createQuery(session, statement); URI pagesUri = uriBuilderFrom(uriInfo.getRequestUri()).appendPath(queryInfo.getQueryId().toString()).build(); return Response.created(pagesUri).entity(queryInfo).build(); }
/** * Remove completed queries after a waiting period */ private void removeExpiredQueries() { DateTime timeHorizon = DateTime.now().minus(maxQueryAge.toMillis()); // we're willing to keep queries beyond timeHorizon as long as we have fewer than maxQueryHistory while (expirationQueue.size() > maxQueryHistory) { QueryInfo queryInfo = expirationQueue.peek().getQueryInfo(); // expirationQueue is FIFO based on query end time. Stop when we see the // first query that's too young to expire if (queryInfo.getQueryStats().getEndTime().isAfter(timeHorizon)) { return; } // only expire them if they are older than maxQueryAge. We need to keep them // around for a while in case clients come back asking for status QueryId queryId = queryInfo.getQueryId(); log.debug("Remove query %s", queryId); queries.remove(queryId); expirationQueue.remove(); } }
public void failAbandonedQueries() { for (QueryExecution queryExecution : queries.values()) { QueryInfo queryInfo = queryExecution.getQueryInfo(); if (queryInfo.getState().isDone()) { continue; } if (isAbandoned(queryExecution)) { log.info("Failing abandoned query %s", queryExecution.getQueryId()); queryExecution.fail(new AbandonedException("Query " + queryInfo.getQueryId(), queryInfo.getQueryStats().getLastHeartbeat(), DateTime.now())); } } }
public void createdEvent(QueryInfo queryInfo) { eventClient.post( new QueryCreatedEvent( queryInfo.getQueryId(), queryInfo.getSession().getTransactionId().map(TransactionId::toString).orElse(null), queryInfo.getSession().getUser(), queryInfo.getSession().getPrincipal().orElse(null), queryInfo.getSession().getSource().orElse(null), serverVersion, environment, queryInfo.getSession().getCatalog().orElse(null), queryInfo.getSession().getSchema().orElse(null), queryInfo.getSession().getRemoteUserAddress().orElse(null), queryInfo.getSession().getUserAgent().orElse(null), queryInfo.getSelf(), queryInfo.getQuery(), queryInfo.getQueryStats().getCreateTime() ) ); }
private static QueryId createQuery(DistributedQueryRunner queryRunner, Session session, String sql) { return queryRunner.getCoordinator().getQueryManager().createQuery(session, sql).getQueryId(); }
private static QueryError toQueryError(QueryInfo queryInfo) { FailureInfo failure = queryInfo.getFailureInfo(); if (failure == null) { QueryState state = queryInfo.getState(); if ((!state.isDone()) || (state == QueryState.FINISHED)) { return null; } log.warn("Query %s in state %s has no failure info", queryInfo.getQueryId(), state); failure = toFailure(new RuntimeException(format("Query is %s (reason unknown)", state))).toFailureInfo(); } ErrorCode errorCode; if (queryInfo.getErrorCode() != null) { errorCode = queryInfo.getErrorCode(); } else { errorCode = INTERNAL_ERROR.toErrorCode(); log.warn("Failed query %s has no error code", queryInfo.getQueryId()); } return new QueryError( failure.getMessage(), null, errorCode.getCode(), errorCode.getName(), toErrorType(errorCode.getCode()).toString(), failure.getErrorLocation(), failure); }
queryInfo.getQueryId(), queryInfo.getSession(), queryInfo.getState(),
@Override public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, ConnectorSession session, TupleDomain<Integer> constraint) { Builder table = InMemoryRecordSet.builder(QUERY_TABLE); for (QueryInfo queryInfo : queryManager.getAllQueryInfo()) { QueryStats queryStats = queryInfo.getQueryStats(); table.addRow( nodeId, queryInfo.getQueryId().toString(), queryInfo.getState().toString(), queryInfo.getSession().getUser(), queryInfo.getSession().getSource().orElse(null), queryInfo.getQuery(), toMillis(queryStats.getQueuedTime()), toMillis(queryStats.getAnalysisTime()), toMillis(queryStats.getDistributedPlanningTime()), toTimeStamp(queryStats.getCreateTime()), toTimeStamp(queryStats.getExecutionStartTime()), toTimeStamp(queryStats.getLastHeartbeat()), toTimeStamp(queryStats.getEndTime())); } return table.build().cursor(); }
public BasicQueryInfo(QueryInfo queryInfo) { this(queryInfo.getQueryId(), queryInfo.getSession(), queryInfo.getState(), queryInfo.getErrorType(), queryInfo.getErrorCode(), queryInfo.isScheduled(), queryInfo.getQueryStats().isFullyBlocked(), queryInfo.getQueryStats().getBlockedReasons(), queryInfo.getSelf(), queryInfo.getQuery(), queryInfo.getQueryStats().getElapsedTime(), queryInfo.getQueryStats().getEndTime(), queryInfo.getQueryStats().getCreateTime(), queryInfo.getQueryStats().getRunningDrivers(), queryInfo.getQueryStats().getQueuedDrivers(), queryInfo.getQueryStats().getCompletedDrivers(), queryInfo.getQueryStats().getTotalDrivers()); }