diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java b/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java index b8b3d7e08696ed..95c65c7bbd947e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java @@ -1231,6 +1231,10 @@ public byte[] getSqlState() { return sqlState; } + public String getErrorMsg() { + return errorMsg; + } + public String formatErrorMsg(Object... args) { try { return String.format(errorMsg, args); diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/AuditLogHelper.java b/fe/fe-core/src/main/java/org/apache/doris/qe/AuditLogHelper.java index 54ea32eda7e562..4181f66786c8cf 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/AuditLogHelper.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/AuditLogHelper.java @@ -112,6 +112,11 @@ public static void logAuditLog(ConnectContext ctx, String origStmt, StatementBas if (!Env.getCurrentEnv().isMaster()) { if (ctx.executor.isForwardToMaster()) { ctx.getAuditEventBuilder().setState(ctx.executor.getProxyStatus()); + int proxyStatusCode = ctx.executor.getProxyStatusCode(); + if (proxyStatusCode != 0) { + ctx.getAuditEventBuilder().setErrorCode(proxyStatusCode); + ctx.getAuditEventBuilder().setErrorMessage(ctx.executor.getProxyErrMsg()); + } } } Env.getCurrentAuditEventProcessor().handleAuditEvent(ctx.getAuditEventBuilder().build()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java index 3fe4457ba5a81e..537a5553472443 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java @@ -555,6 +555,12 @@ public TMasterOpResult proxyExecute(TMasterOpRequest request) { result.setMaxJournalId(Env.getCurrentEnv().getMaxJournalId()); result.setPacket(getResultPacket()); result.setStatus(ctx.getState().toString()); + if (ctx.getState().getStateType() == MysqlStateType.OK) { + result.setStatusCode(0); + } else { + result.setStatusCode(ctx.getState().getErrorCode().getCode()); + result.setErrMessage(ctx.getState().getErrorMessage()); + } if (executor != null && executor.getProxyResultSet() != null) { result.setResultSet(executor.getProxyResultSet().tothrift()); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/MasterOpExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/MasterOpExecutor.java index 03f60497f248d4..7ed7061fbf51d7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/MasterOpExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/MasterOpExecutor.java @@ -21,6 +21,7 @@ import org.apache.doris.catalog.Env; import org.apache.doris.common.ClientPool; import org.apache.doris.common.DdlException; +import org.apache.doris.common.ErrorCode; import org.apache.doris.thrift.FrontendService; import org.apache.doris.thrift.TMasterOpRequest; import org.apache.doris.thrift.TMasterOpResult; @@ -206,6 +207,23 @@ public String getProxyStatus() { } } + public int getProxyStatusCode() { + if (result == null || !result.isSetStatusCode()) { + return ErrorCode.ERR_UNKNOWN_ERROR.getCode(); + } + return result.getStatusCode(); + } + + public String getProxyErrMsg() { + if (result == null) { + return ErrorCode.ERR_UNKNOWN_ERROR.getErrorMsg(); + } + if (!result.isSetErrMessage()) { + return ""; + } + return result.getErrMessage(); + } + public ShowResultSet getProxyResultSet() { if (result == null) { return null; 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 6dab383e06b9ee..40bab40c2b2cfa 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 @@ -396,6 +396,20 @@ public String getProxyStatus() { return masterOpExecutor.getProxyStatus(); } + public int getProxyStatusCode() { + if (masterOpExecutor == null) { + return MysqlStateType.UNKNOWN.ordinal(); + } + return masterOpExecutor.getProxyStatusCode(); + } + + public String getProxyErrMsg() { + if (masterOpExecutor == null) { + return MysqlStateType.UNKNOWN.name(); + } + return masterOpExecutor.getProxyErrMsg(); + } + public boolean isSyncLoadKindStmt() { if (parsedStmt == null) { return false; diff --git a/gensrc/thrift/FrontendService.thrift b/gensrc/thrift/FrontendService.thrift index 4c62de1138aefe..d8a53d35662658 100644 --- a/gensrc/thrift/FrontendService.thrift +++ b/gensrc/thrift/FrontendService.thrift @@ -530,6 +530,8 @@ struct TMasterOpResult { 3: optional TShowResultSet resultSet; 4: optional Types.TUniqueId queryId; 5: optional string status; + 6: optional i32 statusCode; + 7: optional string errMessage; } struct TUpdateExportTaskStatusRequest {