From 65e3da255f96c1cb047e4e881023a7d1225de8d7 Mon Sep 17 00:00:00 2001 From: Siyang Tang <82279870+TangSiyang2001@users.noreply.github.com> Date: Thu, 21 Dec 2023 21:16:36 +0800 Subject: [PATCH] [enhancement](audit-log) add status code and error msg to audit log for proxy stmt (#27607) --- .../org/apache/doris/common/ErrorCode.java | 4 ++++ .../org/apache/doris/qe/AuditLogHelper.java | 5 +++++ .../org/apache/doris/qe/ConnectProcessor.java | 6 ++++++ .../org/apache/doris/qe/MasterOpExecutor.java | 18 ++++++++++++++++++ .../java/org/apache/doris/qe/StmtExecutor.java | 14 ++++++++++++++ gensrc/thrift/FrontendService.thrift | 2 ++ 6 files changed, 49 insertions(+) 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 b8b3d7e086..95c65c7bbd 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 enum ErrorCode { 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 54ea32eda7..4181f66786 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 class AuditLogHelper { 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 3fe4457ba5..537a555347 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 abstract class ConnectProcessor { 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 03f60497f2..7ed7061fbf 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.analysis.RedirectStatus; 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 class MasterOpExecutor { } } + 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 6dab383e06..40bab40c2b 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 class StmtExecutor { 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 4c62de1138..d8a53d3566 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 {