This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 6b945680a7 [Improve](point query) audit point query (#21587)
6b945680a7 is described below
commit 6b945680a72eefc20fa0261c78e39c4bb3ad3b13
Author: lihangyu <[email protected]>
AuthorDate: Sun Jul 9 16:43:41 2023 +0800
[Improve](point query) audit point query (#21587)
---
.../java/org/apache/doris/analysis/ExecuteStmt.java | 14 ++++++++++++++
.../main/java/org/apache/doris/qe/ConnectProcessor.java | 17 +++++++++++++----
.../java/org/apache/doris/qe/PrepareStmtContext.java | 11 +++++++++++
3 files changed, 38 insertions(+), 4 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExecuteStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExecuteStmt.java
index 3230770879..df5707dda6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExecuteStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExecuteStmt.java
@@ -40,4 +40,18 @@ public class ExecuteStmt extends StatementBase {
public RedirectStatus getRedirectStatus() {
return RedirectStatus.NO_FORWARD;
}
+
+ @Override
+ public String toSql() {
+ String sql = "EXECUTE(";
+ int size = args.size();
+ for (int i = 0; i < size; ++i) {
+ sql += args.get(i).toSql();
+ if (i < size - 1) {
+ sql += ", ";
+ }
+ }
+ sql += ")";
+ return sql;
+ }
}
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 36580e5c7a..f190f68280 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
@@ -219,10 +219,16 @@ public class ConnectProcessor {
"msg: Not supported such prepared statement");
return;
}
+ ctx.setStartTime();
+ if (prepareCtx.stmt.getInnerStmt() instanceof QueryStmt) {
+ ctx.getState().setIsQuery(true);
+ }
+ prepareCtx.stmt.setIsPrepared();
int paramCount = prepareCtx.stmt.getParmCount();
// null bitmap
byte[] nullbitmapData = new byte[(paramCount + 7) / 8];
packetBuf.get(nullbitmapData);
+ String stmtStr = "";
try {
// new_params_bind_flag
if ((int) packetBuf.get() != 0) {
@@ -252,6 +258,7 @@ public class ConnectProcessor {
executor = new StmtExecutor(ctx, executeStmt);
ctx.setExecutor(executor);
executor.execute();
+ stmtStr = executeStmt.toSql();
} catch (Throwable e) {
// Catch all throwable.
// If reach here, maybe palo bug.
@@ -259,9 +266,11 @@ public class ConnectProcessor {
ctx.getState().setError(ErrorCode.ERR_UNKNOWN_ERROR,
e.getClass().getSimpleName() + ", msg: " + e.getMessage());
}
+ auditAfterExec(stmtStr, prepareCtx.stmt.getInnerStmt(), null, false);
}
- private void auditAfterExec(String origStmt, StatementBase parsedStmt,
Data.PQueryStatistics statistics) {
+ private void auditAfterExec(String origStmt, StatementBase parsedStmt,
+ Data.PQueryStatistics statistics, boolean
printFuzzyVariables) {
origStmt = origStmt.replace("\n", " ");
// slow query
long endTime = System.currentTimeMillis();
@@ -283,7 +292,7 @@ public class ConnectProcessor {
.setStmtId(ctx.getStmtId())
.setQueryId(ctx.queryId() == null ? "NaN" :
DebugUtil.printId(ctx.queryId()))
.setTraceId(spanContext.isValid() ? spanContext.getTraceId() :
"")
-
.setFuzzyVariables(ctx.getSessionVariable().printFuzzyVariables());
+ .setFuzzyVariables(!printFuzzyVariables ? "" :
ctx.getSessionVariable().printFuzzyVariables());
if (ctx.getState().isQuery()) {
MetricRepo.COUNTER_QUERY_ALL.increase(1L);
@@ -436,7 +445,7 @@ public class ConnectProcessor {
finalizeCommand();
}
}
- auditAfterExec(auditStmt, executor.getParsedStmt(),
executor.getQueryStatisticsForAuditLog());
+ auditAfterExec(auditStmt, executor.getParsedStmt(),
executor.getQueryStatisticsForAuditLog(), true);
// execute failed, skip remaining stmts
if (ctx.getState().getStateType() == MysqlStateType.ERR) {
break;
@@ -480,7 +489,7 @@ public class ConnectProcessor {
ctx.getState().setErrType(QueryState.ErrType.ANALYSIS_ERR);
}
}
- auditAfterExec(origStmt, parsedStmt, statistics);
+ auditAfterExec(origStmt, parsedStmt, statistics, true);
}
// analyze the origin stmt and return multi-statements
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/qe/PrepareStmtContext.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/PrepareStmtContext.java
index d7279e85ed..e4db61a588 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/PrepareStmtContext.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/PrepareStmtContext.java
@@ -31,6 +31,9 @@ public class PrepareStmtContext {
public Analyzer analyzer;
public String stmtString;
+ // Timestamp in millisecond last command starts at
+ protected volatile long startTime;
+
public PrepareStmtContext(PrepareStmt stmt, ConnectContext ctx, Planner
planner,
Analyzer analyzer, String stmtString) {
this.stmt = stmt;
@@ -41,4 +44,12 @@ public class PrepareStmtContext {
this.analyzer = analyzer;
this.stmtString = stmtString;
}
+
+ public long getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime() {
+ startTime = System.currentTimeMillis();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]