@Override public boolean isDone() { return getState().isDone(); }
queryInfo.getSession().getTransactionId().map(TransactionId::toString), queryInfo.getQuery(), queryInfo.getState().toString(), queryInfo.getSelf(), Optional.empty(),
@GET public List<BasicQueryInfo> getAllQueryInfo(@QueryParam("state") String stateFilter) { QueryState expectedState = stateFilter == null ? null : QueryState.valueOf(stateFilter.toUpperCase(Locale.ENGLISH)); ImmutableList.Builder<BasicQueryInfo> builder = new ImmutableList.Builder<>(); for (BasicQueryInfo queryInfo : queryManager.getQueries()) { if (stateFilter == null || queryInfo.getState() == expectedState) { builder.add(queryInfo); } } return builder.build(); }
@EventField public String getQueryState() { return queryState.name(); }
@JsonProperty public boolean isFinalQueryInfo() { return state.isDone() && getAllStages(outputStage).stream().allMatch(StageInfo::isFinalStageInfo); }
public void queryCreatedEvent(BasicQueryInfo queryInfo) { eventListenerManager.queryCreated( new QueryCreatedEvent( queryInfo.getQueryStats().getCreateTime().toDate().toInstant(), createQueryContext(queryInfo.getSession(), queryInfo.getResourceGroupId()), new QueryMetadata( queryInfo.getQueryId().toString(), queryInfo.getSession().getTransactionId().map(TransactionId::toString), queryInfo.getQuery(), QUEUED.toString(), queryInfo.getSelf(), Optional.empty(), Optional.empty()))); }
private QueryState getQueryState(String queryId) throws SQLException { String sql = format("SELECT state FROM system.runtime.queries WHERE query_id = '%s'", queryId); try (Connection connection = createConnection(); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql)) { assertTrue(resultSet.next(), "Query was not found"); return QueryState.valueOf(requireNonNull(resultSet.getString(1))); } }
@Override public boolean isDone() { return getState().isDone(); }
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))); }
private QueryState getQueryState(String queryId) throws SQLException { String sql = format("SELECT state FROM system.runtime.queries WHERE query_id = '%s'", queryId); try (Connection connection = createConnection(); Statement statement = connection.createStatement(); ResultSet rs = statement.executeQuery(sql)) { assertTrue(rs.next(), "query not found"); return QueryState.valueOf(rs.getString("state")); } }
@Override public boolean isDone() { return getState().isDone(); }
@Test(timeOut = 10000) public void testUpdatePartialCancel() throws Exception { CountDownLatch queryRunning = new CountDownLatch(1); try (Connection connection = createConnection("blackhole", "default"); Statement statement = connection.createStatement()) { // execute the slow update on another thread Future<Integer> future = executorService.submit(() -> statement.executeUpdate("INSERT INTO test_table SELECT count(*) x FROM slow_test_table")); // wait for query to start running statement.unwrap(PrestoStatement.class).setProgressMonitor(stats -> { if (stats.getState().equals(RUNNING.toString())) { queryRunning.countDown(); } }); queryRunning.await(10, SECONDS); // perform partial cancel from this test thread statement.unwrap(PrestoStatement.class).partialCancel(); // make sure query completes assertEquals(future.get(10, SECONDS), (Integer) 1); } }
private Optional<QueryState> findQueryState(String text) throws SQLException { String sql = format("SELECT state FROM system.runtime.queries WHERE regexp_like(query, '%s$') /* */", Pattern.quote(text)); try (Connection connection = createConnection(); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql)) { if (!resultSet.next()) { return Optional.empty(); } QueryState state = QueryState.valueOf(requireNonNull(resultSet.getString(1))); assertFalse(resultSet.next(), "Found multiple queries"); return Optional.of(state); } }
public boolean isDone() { return queryState.get().isDone(); }
table.addRow( queryInfo.getQueryId().toString(), queryInfo.getState().toString(), queryInfo.getSession().getUser(), queryInfo.getSession().getSource().orElse(null),
private QueryState getQueryState(String queryId) throws SQLException { String sql = format("SELECT state FROM system.runtime.queries WHERE query_id = '%s'", queryId); try (Connection connection = createConnection(); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql)) { assertTrue(resultSet.next(), "Query was not found"); return QueryState.valueOf(requireNonNull(resultSet.getString(1))); } }
private ListenableFuture<?> queryDoneFuture(QueryState currentState) { if (currentState.isDone()) { return immediateFuture(null); } return Futures.transformAsync(queryManager.getStateChange(queryId, currentState), this::queryDoneFuture, directExecutor()); }
private static StatementStats toStatementStats(QueryInfo queryInfo) { QueryStats queryStats = queryInfo.getQueryStats(); StageInfo outputStage = queryInfo.getOutputStage().orElse(null); return StatementStats.builder() .setState(queryInfo.getState().toString()) .setQueued(queryInfo.getState() == QueryState.QUEUED) .setScheduled(queryInfo.isScheduled()) .setNodes(globalUniqueNodes(outputStage).size()) .setTotalSplits(queryStats.getTotalDrivers()) .setQueuedSplits(queryStats.getQueuedDrivers()) .setRunningSplits(queryStats.getRunningDrivers() + queryStats.getBlockedDrivers()) .setCompletedSplits(queryStats.getCompletedDrivers()) .setCpuTimeMillis(queryStats.getTotalCpuTime().toMillis()) .setWallTimeMillis(queryStats.getTotalScheduledTime().toMillis()) .setQueuedTimeMillis(queryStats.getQueuedTime().toMillis()) .setElapsedTimeMillis(queryStats.getElapsedTime().toMillis()) .setProcessedRows(queryStats.getRawInputPositions()) .setProcessedBytes(queryStats.getRawInputDataSize().toBytes()) .setPeakMemoryBytes(queryStats.getPeakUserMemoryReservation().toBytes()) .setSpilledBytes(queryStats.getSpilledDataSize().toBytes()) .setRootStage(toStageStats(outputStage)) .build(); }
private Optional<QueryState> findQueryState(String text) throws SQLException { String sql = format("SELECT state FROM system.runtime.queries WHERE regexp_like(query, '%s$') /* */", Pattern.quote(text)); try (Connection connection = createConnection(); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql)) { if (!resultSet.next()) { return Optional.empty(); } QueryState state = QueryState.valueOf(requireNonNull(resultSet.getString(1))); assertFalse(resultSet.next(), "Found multiple queries"); return Optional.of(state); } }