/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.tajo.client.v2; import org.apache.tajo.auth.UserRoleInfo; import java.sql.ResultSet; import java.util.concurrent.Future; /** * */ public interface QueryFuture extends Future<ResultSet>, AutoCloseable { /** * Get a query id * * @return query id */ String id(); /** * Get the queue name that the query is running * * @return queue name */ String queue(); /** * Get a query state * * @return query state */ QueryState state(); /** * Get a normalized progress (0 ~ 1.0f) of a query running * * @return progress */ float progress(); /** * A submitted or running query state is normal * * @return True if a query state is normal */ boolean isOk(); /** * Get whether the query is successfully completed or not. * * @return True if the query is successfully completed. */ boolean isSuccessful(); /** * Get whether the query is abort due to error. * * @return True if the query is abort due to error. */ boolean isFailed(); /** * Get whether the query is killed. This is equivalent to * @{link Future#cancel}. * * @return True if the query is already killed. */ boolean isKilled(); /** * Get an user information * * @return UserRoleInfo */ UserRoleInfo user(); /** * Kill this query */ void kill(); /** * Get the time when a query is submitted. * This time can be different from @{link QueryFuture#startTime} * due to scheduling delay. * * @return Millisecond since epoch */ long submitTime(); /** * Get the time when a query is actually launched. * * @return Millisecond since epoch */ long startTime(); /** * Get the time when a query is finished. * * @return Millisecond since epoch */ long finishTime(); /** * Release a query future. It will be automatically released after the session invalidation. */ void close(); /** * Add a listener which will be executed after this query is completed, error, failed or killed. * * @param future */ void addListener(FutureListener<QueryFuture> future); }