This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.1 by this push:
new bd38508440f branch-3.1: [fix](http stream) http stream should throw
exception if parse sql failed #55863 (#55891)
bd38508440f is described below
commit bd38508440f0a89f448226b9963d56fd9cbffd1d
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Sep 12 10:42:50 2025 +0800
branch-3.1: [fix](http stream) http stream should throw exception if parse
sql failed #55863 (#55891)
Cherry-picked from #55863
Co-authored-by: meiyi <[email protected]>
---
.../main/java/org/apache/doris/qe/StmtExecutor.java | 12 +++++-------
.../org/apache/doris/service/FrontendServiceImpl.java | 4 ++--
.../load_p0/http_stream/test_http_stream.groovy | 19 +++++++++++++++++++
3 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
index f5630b80d31..3b2aeb116ff 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -3620,7 +3620,7 @@ public class StmtExecutor {
}
private HttpStreamParams generateHttpStreamNereidsPlan(TUniqueId queryId) {
- LOG.info("TUniqueId: {} generate stream load plan", queryId);
+ LOG.info("TUniqueId: {} generate stream load plan",
DebugUtil.printId(queryId));
context.setQueryId(queryId);
context.setStmtId(STMT_ID_GENERATOR.incrementAndGet());
@@ -3629,7 +3629,6 @@ public class StmtExecutor {
"Nereids only process LogicalPlanAdapter, but parsedStmt is "
+ parsedStmt.getClass().getName());
context.getState().setNereids(true);
InsertIntoTableCommand insert = (InsertIntoTableCommand)
((LogicalPlanAdapter) parsedStmt).getLogicalPlan();
- HttpStreamParams httpStreamParams = new HttpStreamParams();
try {
if
(!StringUtils.isEmpty(context.getSessionVariable().groupCommit)) {
@@ -3639,6 +3638,7 @@ public class StmtExecutor {
context.setGroupCommit(true);
}
OlapInsertExecutor insertExecutor = (OlapInsertExecutor)
insert.initPlan(context, this);
+ HttpStreamParams httpStreamParams = new HttpStreamParams();
httpStreamParams.setTxnId(insertExecutor.getTxnId());
httpStreamParams.setDb(insertExecutor.getDatabase());
httpStreamParams.setTable(insertExecutor.getTable());
@@ -3655,6 +3655,7 @@ public class StmtExecutor {
if (!isValidPlan) {
throw new AnalysisException("plan is invalid: " +
planRoot.getExplainString());
}
+ return httpStreamParams;
} catch (QueryStateException e) {
LOG.debug("Command(" + originStmt.originStmt + ") process
failed.", e);
context.setState(e.getQueryState());
@@ -3673,7 +3674,6 @@ public class StmtExecutor {
throw new NereidsException("Command (" + originStmt.originStmt +
") process failed.",
new AnalysisException(e.getMessage(), e));
}
- return httpStreamParams;
}
private HttpStreamParams generateHttpStreamLegacyPlan(TUniqueId queryId)
throws Exception {
@@ -3705,12 +3705,11 @@ public class StmtExecutor {
public HttpStreamParams generateHttpStreamPlan(TUniqueId queryId) throws
Exception {
SessionVariable sessionVariable = context.getSessionVariable();
- HttpStreamParams httpStreamParams = null;
try {
try {
// disable shuffle for http stream (only 1 sink)
sessionVariable.setVarOnce(SessionVariable.ENABLE_STRICT_CONSISTENCY_DML,
"false");
- httpStreamParams = generateHttpStreamNereidsPlan(queryId);
+ return generateHttpStreamNereidsPlan(queryId);
} catch (NereidsException | ParseException e) {
if (context.getMinidump() != null &&
context.getMinidump().toString(4) != null) {
MinidumpUtils.saveMinidumpString(context.getMinidump(),
DebugUtil.printId(context.queryId()));
@@ -3722,8 +3721,8 @@ public class StmtExecutor {
}
if (e instanceof NereidsException) {
LOG.warn("Analyze failed. {}",
context.getQueryIdentifier(), e);
- throw ((NereidsException) e).getException();
}
+ throw e;
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -3739,7 +3738,6 @@ public class StmtExecutor {
context.getState().setError(e.getMysqlErrorCode(),
e.getMessage());
}
}
- return httpStreamParams;
}
public SummaryProfile getSummaryProfile() {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
index 262f64938cc..e8089d74399 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
@@ -2270,8 +2270,8 @@ public class FrontendServiceImpl implements
FrontendService.Iface {
LOG.warn("exec sql error", e);
throw e;
} catch (Throwable e) {
- LOG.warn("exec sql error catch unknown result.", e);
- throw new UserException("exec sql error catch unknown result." +
e);
+ LOG.warn("exec sql: {} catch unknown result. ", originStmt, e);
+ throw new UserException("exec sql error catch unknown result. " +
e.getMessage());
}
return httpStreamParams;
}
diff --git a/regression-test/suites/load_p0/http_stream/test_http_stream.groovy
b/regression-test/suites/load_p0/http_stream/test_http_stream.groovy
index 8a7d5763604..81ad780a663 100644
--- a/regression-test/suites/load_p0/http_stream/test_http_stream.groovy
+++ b/regression-test/suites/load_p0/http_stream/test_http_stream.groovy
@@ -63,6 +63,25 @@ suite("test_http_stream", "p0") {
}
}
+ // test error sql
+ streamLoad {
+ set 'version', '1'
+ set 'sql', """
+ insert into ${db}.${tableName1} (id, name) select
+ """
+ time 10000
+ file 'test_http_stream.csv'
+ check { result, exception, startTime, endTime ->
+ if (exception != null) {
+ throw exception
+ }
+ log.info("http_stream result: ${result}".toString())
+ def json = parseJson(result)
+ assertEquals("fail", json.Status.toLowerCase())
+ assertTrue(json.Message.contains("Nereids parse failed"))
+ }
+ }
+
qt_sql1 "select id, name from ${tableName1}"
} finally {
try_sql "DROP TABLE IF EXISTS ${tableName1}"
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]