This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 2b62fb1a593 [fix](audit) fix potential audit log missing issue 
(#50357) (#50501)
2b62fb1a593 is described below

commit 2b62fb1a593e5c41debb9258b902d8c6d122b911
Author: Mingyu Chen (Rayner) <morning...@163.com>
AuthorDate: Mon Apr 28 17:27:13 2025 -0700

    [fix](audit) fix potential audit log missing issue (#50357) (#50501)
    
    bp #50357
---
 .../apache/doris/plugin/audit/AuditLogBuilder.java |  4 +---
 .../org/apache/doris/qe/AuditEventProcessor.java   | 28 ++++++++++------------
 .../java/org/apache/doris/qe/AuditLogHelper.java   |  7 +++++-
 .../org/apache/doris/qe/MysqlConnectProcessor.java |  2 +-
 .../WorkloadRuntimeStatusMgr.java                  | 13 ++++++----
 5 files changed, 29 insertions(+), 25 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/plugin/audit/AuditLogBuilder.java 
b/fe/fe-core/src/main/java/org/apache/doris/plugin/audit/AuditLogBuilder.java
index 56465f9c17b..4208d5def2e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/plugin/audit/AuditLogBuilder.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/plugin/audit/AuditLogBuilder.java
@@ -93,9 +93,7 @@ public class AuditLogBuilder extends Plugin implements 
AuditPlugin {
                     break;
             }
         } catch (Exception e) {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("failed to process audit event", e);
-            }
+            LOG.warn("failed to process audit event: {}", event.queryId, e);
         }
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/qe/AuditEventProcessor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/AuditEventProcessor.java
index 42625301df1..b8855600eca 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/AuditEventProcessor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/AuditEventProcessor.java
@@ -17,6 +17,7 @@
 
 package org.apache.doris.qe;
 
+import org.apache.doris.common.Config;
 import org.apache.doris.plugin.AuditEvent;
 import org.apache.doris.plugin.AuditPlugin;
 import org.apache.doris.plugin.Plugin;
@@ -44,7 +45,7 @@ public class AuditEventProcessor {
     private List<Plugin> auditPlugins;
     private long lastUpdateTime = 0;
 
-    private BlockingQueue<AuditEvent> eventQueue = 
Queues.newLinkedBlockingDeque(10000);
+    private BlockingQueue<AuditEvent> eventQueue = 
Queues.newLinkedBlockingDeque();
     private Thread workerThread;
 
     private volatile boolean isStopped = false;
@@ -71,18 +72,19 @@ public class AuditEventProcessor {
     }
 
     public boolean handleAuditEvent(AuditEvent auditEvent) {
-        return handleAuditEvent(auditEvent, false);
-    }
-
-    public boolean handleAuditEvent(AuditEvent auditEvent, boolean 
ignoreQueueFullLog) {
         boolean isAddSucc = true;
         try {
-            eventQueue.add(auditEvent);
+            if (eventQueue.size() >= Config.audit_event_log_queue_size) {
+                isAddSucc = false;
+                LOG.warn("the audit event queue is full with size {}, discard 
the audit event: {}",
+                        eventQueue.size(), auditEvent.queryId);
+            } else {
+                eventQueue.add(auditEvent);
+            }
         } catch (Exception e) {
             isAddSucc = false;
-            if (!ignoreQueueFullLog) {
-                LOG.warn("encounter exception when handle audit event {}, 
ignore", auditEvent.type, e);
-            }
+            LOG.warn("encounter exception when handle audit event {}, discard 
the event",
+                    auditEvent.queryId, e);
         }
         return isAddSucc;
     }
@@ -108,9 +110,7 @@ public class AuditEventProcessor {
                         continue;
                     }
                 } catch (InterruptedException e) {
-                    if (LOG.isDebugEnabled()) {
-                        LOG.debug("encounter exception when getting audit 
event from queue, ignore", e);
-                    }
+                    LOG.warn("encounter exception when getting audit event 
from queue, ignore", e);
                     continue;
                 }
 
@@ -121,9 +121,7 @@ public class AuditEventProcessor {
                         }
                     }
                 } catch (Exception e) {
-                    if (LOG.isDebugEnabled()) {
-                        LOG.debug("encounter exception when processing audit 
event.", e);
-                    }
+                    LOG.warn("encounter exception when processing audit 
events. ignore", e);
                 }
             }
         }
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 e060e198733..d7621a1476e 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
@@ -39,6 +39,7 @@ import 
org.apache.doris.nereids.trees.plans.commands.insert.InsertIntoTableComma
 import org.apache.doris.nereids.trees.plans.logical.LogicalInlineTable;
 import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalUnion;
+import org.apache.doris.plugin.AuditEvent;
 import org.apache.doris.plugin.AuditEvent.AuditEventBuilder;
 import org.apache.doris.plugin.AuditEvent.EventType;
 import org.apache.doris.qe.QueryState.MysqlStateType;
@@ -257,6 +258,10 @@ public class AuditLogHelper {
         if (ctx.getCommand() == MysqlCommand.COM_STMT_PREPARE && 
ctx.getState().getErrorCode() == null) {
             auditEventBuilder.setState(String.valueOf(MysqlStateType.OK));
         }
-        
Env.getCurrentEnv().getWorkloadRuntimeStatusMgr().submitFinishQueryToAudit(auditEventBuilder.build());
+        AuditEvent event = auditEventBuilder.build();
+        
Env.getCurrentEnv().getWorkloadRuntimeStatusMgr().submitFinishQueryToAudit(event);
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("submit audit event: {}", event.queryId);
+        }
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/qe/MysqlConnectProcessor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/MysqlConnectProcessor.java
index f40bae578a4..0c89b4a8403 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/MysqlConnectProcessor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/MysqlConnectProcessor.java
@@ -258,7 +258,7 @@ public class MysqlConnectProcessor extends ConnectProcessor 
{
             // get from lagacy planner context, to be removed
             handleExecute((PrepareStmt) prepareCtx.stmt, stmtId);
         } else {
-            // nererids
+            // nereids
             PreparedStatementContext preparedStatementContext = 
ctx.getPreparedStementContext(String.valueOf(stmtId));
             if (preparedStatementContext == null) {
                 LOG.warn("No such statement in context, stmtId:{}", stmtId);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/resource/workloadschedpolicy/WorkloadRuntimeStatusMgr.java
 
b/fe/fe-core/src/main/java/org/apache/doris/resource/workloadschedpolicy/WorkloadRuntimeStatusMgr.java
index ce0703f23a8..e888f79b808 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/resource/workloadschedpolicy/WorkloadRuntimeStatusMgr.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/resource/workloadschedpolicy/WorkloadRuntimeStatusMgr.java
@@ -87,7 +87,7 @@ public class WorkloadRuntimeStatusMgr extends MasterDaemon {
                     auditEvent.scanBytesFromLocalStorage = 
queryStats.scan_bytes_from_local_storage;
                     auditEvent.scanBytesFromRemoteStorage = 
queryStats.scan_bytes_from_remote_storage;
                 }
-                boolean ret = 
Env.getCurrentAuditEventProcessor().handleAuditEvent(auditEvent, true);
+                boolean ret = 
Env.getCurrentAuditEventProcessor().handleAuditEvent(auditEvent);
                 if (!ret) {
                     missedLogCount++;
                 } else {
@@ -110,9 +110,12 @@ public class WorkloadRuntimeStatusMgr extends MasterDaemon 
{
         queryAuditEventLogWriteLock();
         try {
             if (queryAuditEventList.size() >= 
Config.audit_event_log_queue_size) {
-                LOG.warn("audit log event queue size {} is full, this may 
cause audit log missed."
-                                + "you can check whether qps is too high or 
reset audit_event_log_queue_size",
-                        queryAuditEventList.size());
+                // if queryAuditEventList is full, we don't put the event to 
queryAuditEventList.
+                // so that the statistic info of this audit event will be 
ignored, and event will be logged directly.
+                LOG.warn("audit log event queue size {} is full, this may 
cause audit log missing statistics."
+                                + "you can check whether qps is too high or "
+                                + "set audit_event_log_queue_size to a larger 
value in fe.conf. query id: {}",
+                        queryAuditEventList.size(), event.queryId);
                 return;
             }
             event.pushToAuditLogQueueTime = System.currentTimeMillis();
@@ -122,7 +125,7 @@ public class WorkloadRuntimeStatusMgr extends MasterDaemon {
         }
     }
 
-    public List<AuditEvent> getQueryNeedAudit() {
+    private List<AuditEvent> getQueryNeedAudit() {
         List<AuditEvent> ret = new ArrayList<>();
         long currentTime = System.currentTimeMillis();
         queryAuditEventLogWriteLock();


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to