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]