From 6072c6a3d2678c85ac0b4fe4939692ac11d632fe Mon Sep 17 00:00:00 2001 From: Simeon Widdis Date: Wed, 3 Dec 2025 18:39:39 +0000 Subject: [PATCH 1/2] Improve timeout err for BG search Signed-off-by: Simeon Widdis --- .../opensearch/storage/scan/BackgroundSearchScanner.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/opensearch/src/main/java/org/opensearch/sql/opensearch/storage/scan/BackgroundSearchScanner.java b/opensearch/src/main/java/org/opensearch/sql/opensearch/storage/scan/BackgroundSearchScanner.java index 4019346e055..a0b7089a01f 100644 --- a/opensearch/src/main/java/org/opensearch/sql/opensearch/storage/scan/BackgroundSearchScanner.java +++ b/opensearch/src/main/java/org/opensearch/sql/opensearch/storage/scan/BackgroundSearchScanner.java @@ -13,6 +13,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; import javax.annotation.Nullable; +import org.opensearch.OpenSearchTimeoutException; import org.opensearch.sql.data.model.ExprValue; import org.opensearch.sql.exception.NonFallbackCalciteException; import org.opensearch.sql.opensearch.client.OpenSearchClient; @@ -104,11 +105,16 @@ private OpenSearchResponse getCurrentResponse(OpenSearchRequest request) { if (isAsync()) { try { return nextBatchFuture.get(); - } catch (InterruptedException | ExecutionException e) { + } catch (ExecutionException e) { throw new NonFallbackCalciteException( "Failed to fetch data from the index: the background task failed or interrupted.\n" + " Inner error: " + e.getMessage()); + } catch (InterruptedException e) { + throw new OpenSearchTimeoutException( + new InterruptedException( + "Execution of the index search timed out. Increase the timeout via the" + + " `ppl.query.timeout` setting.")); } } else { return client.search(request); From 117890642f66d8424dc1649b89e3ea99d0a495ee Mon Sep 17 00:00:00 2001 From: Simeon Widdis Date: Wed, 3 Dec 2025 18:54:47 +0000 Subject: [PATCH 2/2] Handle special case of timeout exceptions at SQLException catching layer Signed-off-by: Simeon Widdis --- .../sql/opensearch/executor/OpenSearchExecutionEngine.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/opensearch/src/main/java/org/opensearch/sql/opensearch/executor/OpenSearchExecutionEngine.java b/opensearch/src/main/java/org/opensearch/sql/opensearch/executor/OpenSearchExecutionEngine.java index 07f0683acad..43b9beabdda 100644 --- a/opensearch/src/main/java/org/opensearch/sql/opensearch/executor/OpenSearchExecutionEngine.java +++ b/opensearch/src/main/java/org/opensearch/sql/opensearch/executor/OpenSearchExecutionEngine.java @@ -36,6 +36,7 @@ import org.apache.calcite.sql.validate.SqlUserDefinedFunction; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.opensearch.OpenSearchTimeoutException; import org.opensearch.sql.ast.statement.Explain.ExplainFormat; import org.opensearch.sql.calcite.CalcitePlanContext; import org.opensearch.sql.calcite.utils.CalciteToolsHelper.OpenSearchRelRunners; @@ -215,6 +216,11 @@ public void execute( buildResultSet( result, rel.getRowType(), context.sysLimit.querySizeLimit(), listener); } catch (SQLException e) { + if (e.getCause() instanceof OpenSearchTimeoutException) { + // Special case: execution failed due to timing, not other generic runtime + // issues + throw (OpenSearchTimeoutException) e.getCause(); + } throw new RuntimeException(e); } return null;