ashniku commented on code in PR #6412:
URL: https://github.com/apache/hive/pull/6412#discussion_r3557469635
##########
service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java:
##########
@@ -177,20 +177,22 @@ private void prepare(QueryState queryState) throws
HiveSQLException {
timeoutExecutor = Executors.newSingleThreadScheduledExecutor();
timeoutExecutor.schedule(() -> {
try {
- // The query may have already finished, failed, or been cancelled
before this task
- // fires (the executor is only shut down when the operation is
closed). Skip in that
- // case so we don't overwrite a real result/exception with a
spurious timeout message.
- if (getState().isTerminal()) {
- return null;
+ synchronized (SQLOperation.this) {
Review Comment:
Removed the synchronized (SQLOperation.this) block from the timeout
callback. timeoutExecutor is already a single-thread
ScheduledThreadPoolExecutor(1), so only one timeout task runs at a time and we
don’t synchronize elsewhere in this path. The callback now calls
cancel(OperationState.TIMEDOUT) directly; terminal-state protection is handled
in setState().
##########
service/src/java/org/apache/hive/service/cli/operation/Operation.java:
##########
@@ -202,6 +202,14 @@ public long getNumModifiedRows() {
}
protected void setOperationException(HiveSQLException operationException) {
+ if (state == OperationState.TIMEDOUT) {
+ return;
+ }
+ // Do not overwrite a completed outcome (success, cancel, etc.). ERROR is
excluded so the
+ // background thread can still record the SQLException after runQuery()
sets ERROR.
+ if (state.isTerminal() && state != OperationState.ERROR) {
Review Comment:
Dropped the separate state == OperationState.TIMEDOUT guard. TIMEDOUT is
already terminal, so it’s covered by the general check: if (state.isTerminal()
&& state != OperationState.ERROR) return state; That prevents overwriting
TIMEDOUT, CANCELED, FINISHED, etc., while still allowing transitions from ERROR
(e.g. to CLOSED). Applied the same pattern in SQLOperation.runQuery() catch
block instead of listing individual terminal states.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]