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

dataroaring 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 64395bc1f78 [fix](sql cache) fix sql cache use legacy cache when use 
some special session variables and audit log's HitSqlCache not working (#56434)
64395bc1f78 is described below

commit 64395bc1f7857b56c1d16dfc14c04fb930eb8162
Author: 924060929 <[email protected]>
AuthorDate: Sun Sep 28 09:49:30 2025 +0800

    [fix](sql cache) fix sql cache use legacy cache when use some special 
session variables and audit log's HitSqlCache not working (#56434)
    
    ### What problem does this PR solve?
    
    1. fix sql cache use legacy cache when use some special session
    variables, and make some regression test unstable
      - skip_delete_predicate
      - skip_delete_sign
      - skip_delete_bitmap
      - skip_missing_version
      - skip_bad_tablet
      - skip_storage_engine_merge
      - show_hidden_columns
    2. fix audit log's HitSqlCache not working because not set stmtType for
    LogicalSqlCache
---
 .../trees/plans/logical/LogicalResultSink.java     |  6 ++++
 .../trees/plans/logical/LogicalSqlCache.java       |  6 ++++
 .../java/org/apache/doris/qe/SessionVariable.java  | 40 +++++++++++++++-------
 .../org/apache/doris/qe/cache/CacheAnalyzer.java   |  9 ++++-
 4 files changed, 47 insertions(+), 14 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalResultSink.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalResultSink.java
index 0eb866c4ae1..7f6847af209 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalResultSink.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalResultSink.java
@@ -17,6 +17,7 @@
 
 package org.apache.doris.nereids.trees.plans.logical;
 
+import org.apache.doris.analysis.StmtType;
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.NamedExpression;
@@ -82,4 +83,9 @@ public class LogicalResultSink<CHILD_TYPE extends Plan> 
extends LogicalSink<CHIL
         return Utils.toSqlString("LogicalResultSink[" + id.asInt() + "]",
                 "outputExprs", outputExprs);
     }
+
+    @Override
+    public StmtType stmtType() {
+        return StmtType.SELECT;
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSqlCache.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSqlCache.java
index be44304383d..9cbaa2c0a17 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSqlCache.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSqlCache.java
@@ -18,6 +18,7 @@
 package org.apache.doris.nereids.trees.plans.logical;
 
 import org.apache.doris.analysis.Expr;
+import org.apache.doris.analysis.StmtType;
 import org.apache.doris.common.util.DebugUtil;
 import org.apache.doris.mysql.FieldInfo;
 import org.apache.doris.nereids.memo.GroupExpression;
@@ -142,4 +143,9 @@ public class LogicalSqlCache extends LogicalLeaf implements 
SqlCache, TreeString
     public String getChildrenTreeString() {
         return planBody;
     }
+
+    @Override
+    public StmtType stmtType() {
+        return StmtType.SELECT;
+    }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index acfb9e112b7..60647837417 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -699,11 +699,18 @@ public class SessionVariable implements Serializable, 
Writable {
 
     public static final String EXCHANGE_MULTI_BLOCKS_BYTE_SIZE = 
"exchange_multi_blocks_byte_size";
 
+    public static final String SKIP_CHECKING_ACID_VERSION_FILE = 
"skip_checking_acid_version_file";
+
+    // NOTE: if you want to add some debug variables, please disable sql cache 
in `CacheAnalyzer.commonCacheCondition`,
+    //       and set affectQueryResult=true
     public static final List<String> DEBUG_VARIABLES = ImmutableList.of(
+            DRY_RUN_QUERY,
             SKIP_DELETE_PREDICATE,
             SKIP_DELETE_BITMAP,
             SKIP_DELETE_SIGN,
             SKIP_STORAGE_ENGINE_MERGE,
+            SKIP_MISSING_VERSION,
+            SKIP_BAD_TABLET,
             SHOW_HIDDEN_COLUMNS
     );
 
@@ -747,7 +754,6 @@ public class SessionVariable implements Serializable, 
Writable {
 
     public static final String ENABLE_COOLDOWN_REPLICA_AFFINITY =
             "enable_cooldown_replica_affinity";
-    public static final String SKIP_CHECKING_ACID_VERSION_FILE = 
"skip_checking_acid_version_file";
 
     public static final String READ_HIVE_JSON_IN_ONE_COLUMN = 
"read_hive_json_in_one_column";
 
@@ -1286,7 +1292,12 @@ public class SessionVariable implements Serializable, 
Writable {
     public int maxScanKeyNum = 48;
     @VariableMgr.VarAttr(name = MAX_PUSHDOWN_CONDITIONS_PER_COLUMN)
     public int maxPushdownConditionsPerColumn = 1024;
-    @VariableMgr.VarAttr(name = SHOW_HIDDEN_COLUMNS, flag = 
VariableMgr.SESSION_ONLY, needForward = true)
+    @VariableMgr.VarAttr(
+            name = SHOW_HIDDEN_COLUMNS,
+            flag = VariableMgr.SESSION_ONLY,
+            needForward = true,
+            affectQueryResult = true
+    )
     public boolean showHiddenColumns = false;
 
     @VariableMgr.VarAttr(name = ALLOW_PARTITION_COLUMN_NULLABLE, description = 
{
@@ -1842,25 +1853,25 @@ public class SessionVariable implements Serializable, 
Writable {
     /**
      * For debug purpose, don't merge unique key and agg key when reading data.
      */
-    @VariableMgr.VarAttr(name = SKIP_STORAGE_ENGINE_MERGE, needForward = true)
+    @VariableMgr.VarAttr(name = SKIP_STORAGE_ENGINE_MERGE, needForward = true, 
affectQueryResult = true)
     public boolean skipStorageEngineMerge = false;
 
     /**
      * For debug purpose, skip delete predicate when reading data.
      */
-    @VariableMgr.VarAttr(name = SKIP_DELETE_PREDICATE, needForward = true)
+    @VariableMgr.VarAttr(name = SKIP_DELETE_PREDICATE, needForward = true, 
affectQueryResult = true)
     public boolean skipDeletePredicate = false;
 
     /**
      * For debug purpose, skip delete sign when reading data.
      */
-    @VariableMgr.VarAttr(name = SKIP_DELETE_SIGN, needForward = true)
+    @VariableMgr.VarAttr(name = SKIP_DELETE_SIGN, needForward = true, 
affectQueryResult = true)
     public boolean skipDeleteSign = false;
 
     /**
      * For debug purpose, skip delete bitmap when reading data.
      */
-    @VariableMgr.VarAttr(name = SKIP_DELETE_BITMAP, needForward = true)
+    @VariableMgr.VarAttr(name = SKIP_DELETE_BITMAP, needForward = true, 
affectQueryResult = true)
     public boolean skipDeleteBitmap = false;
 
     // This variable replace the original FE config 
`recover_with_skip_missing_version`.
@@ -1873,7 +1884,7 @@ public class SessionVariable implements Serializable, 
Writable {
     // You should only open it in the emergency scenarios mentioned above, 
only used for temporary recovery queries.
     // This variable conflicts with the use_fix_replica variable, when the 
use_fix_replica variable is not -1,
     // this variable will not work.
-    @VariableMgr.VarAttr(name = SKIP_MISSING_VERSION)
+    @VariableMgr.VarAttr(name = SKIP_MISSING_VERSION, affectQueryResult = true)
     public boolean skipMissingVersion = false;
 
     // This variable is used to control whether to skip the bad tablet.
@@ -1881,7 +1892,7 @@ public class SessionVariable implements Serializable, 
Writable {
     // the table, if one of the tablet is damaged, the table will not be able 
to be select. If the user does not care
     // about the integrity of the data, they can use this variable to 
temporarily skip the bad tablet for querying and
     // load the remaining data into a new table.
-    @VariableMgr.VarAttr(name = SKIP_BAD_TABLET)
+    @VariableMgr.VarAttr(name = SKIP_BAD_TABLET, affectQueryResult = true)
     public boolean skipBadTablet = false;
 
     // This variable is used to avoid FE fallback to the original parser. When 
we execute SQL in regression tests
@@ -2878,10 +2889,12 @@ public class SessionVariable implements Serializable, 
Writable {
     })
     public boolean enableTextValidateUtf8 = true;
 
-    @VariableMgr.VarAttr(name = SKIP_CHECKING_ACID_VERSION_FILE, needForward = 
true, description = {
-            "跳过检查 transactional hive 版本文件 '_orc_acid_version.'",
-            "Skip checking transactional hive version file 
'_orc_acid_version.'"
-    })
+    @VariableMgr.VarAttr(name = SKIP_CHECKING_ACID_VERSION_FILE, needForward = 
true, affectQueryResult = true,
+            description = {
+                "跳过检查 transactional hive 版本文件 '_orc_acid_version.'",
+                "Skip checking transactional hive version file 
'_orc_acid_version.'"
+            }
+    )
     public boolean skipCheckingAcidVersionFile = false;
 
     @VariableMgr.VarAttr(name = ENABLE_SQL_CONVERTOR_FEATURES, needForward = 
true,
@@ -3209,7 +3222,8 @@ public class SessionVariable implements Serializable, 
Writable {
     private Set<Class<? extends Event>> parsedNereidsEventMode = 
EventSwitchParser.parse(Lists.newArrayList("all"));
 
     public boolean isInDebugMode() {
-        return showHiddenColumns || skipDeleteBitmap || skipDeletePredicate || 
skipDeleteSign || skipStorageEngineMerge;
+        return showHiddenColumns || skipDeleteBitmap || skipDeletePredicate || 
skipDeleteSign || skipStorageEngineMerge
+                || skipMissingVersion || skipBadTablet;
     }
 
     public String printDebugModeVariables() {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/qe/cache/CacheAnalyzer.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/cache/CacheAnalyzer.java
index 5ef7321bc23..883c5469d45 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/cache/CacheAnalyzer.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/cache/CacheAnalyzer.java
@@ -206,7 +206,14 @@ public class CacheAnalyzer {
 
     public static boolean commonCacheCondition(SessionVariable 
sessionVariable) {
         return sessionVariable.getSqlSelectLimit() < 0 && 
sessionVariable.getDefaultOrderByLimit() < 0
-                && !sessionVariable.dryRunQuery;
+                && !sessionVariable.dryRunQuery
+                && !sessionVariable.skipDeleteBitmap
+                && !sessionVariable.skipDeleteSign
+                && !sessionVariable.skipDeletePredicate
+                && !sessionVariable.skipStorageEngineMerge
+                && !sessionVariable.skipMissingVersion
+                && !sessionVariable.skipBadTablet
+                && !sessionVariable.showHiddenColumns;
     }
 
     public void checkCacheModeForNereids(long now) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to