From 87544a017f615755f3da35ed37b9823bc0470889 Mon Sep 17 00:00:00 2001 From: yiguolei <676222867@qq.com> Date: Tue, 15 Nov 2022 15:43:21 +0800 Subject: [PATCH] [fuzztest](fe session variable) add fuzzy test config for fe session variables. (#14272) Many feature in fe session variable is disabled by default. So that these features do not pass github workflow test actually. I add a fuzzy test config in fe.conf. If it is set to true, then we will use fuzzy session variables for every connection so that every feature developer could set fuzzy values for its config. Co-authored-by: yiguolei --- .../src/main/java/org/apache/doris/common/Config.java | 6 ++++++ .../main/java/org/apache/doris/qe/ConnectContext.java | 4 ++++ .../java/org/apache/doris/qe/SessionVariable.java | 11 +++++++++++ 3 files changed, 21 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/Config.java b/fe/fe-core/src/main/java/org/apache/doris/common/Config.java index 50c677013a..c1bfb504e7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/Config.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/Config.java @@ -1894,5 +1894,11 @@ public class Config extends ConfigBase { */ @ConfField(mutable = false, masterOnly = false) public static long external_cache_expire_time_minutes_after_access = 24 * 60; // 1 day + + /** + * Set session variables randomly to check more issues in github workflow + */ + @ConfField(mutable = true, masterOnly = false) + public static boolean use_fuzzy_session_variable = false; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java index 6a9e16d9fb..03c75400de 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java @@ -21,6 +21,7 @@ import org.apache.doris.analysis.UserIdentity; import org.apache.doris.catalog.DatabaseIf; import org.apache.doris.catalog.Env; import org.apache.doris.cluster.ClusterNamespace; +import org.apache.doris.common.Config; import org.apache.doris.common.UserException; import org.apache.doris.common.telemetry.Telemetry; import org.apache.doris.common.util.DebugUtil; @@ -213,6 +214,9 @@ public class ConnectContext { remoteIP = mysqlChannel.getRemoteIp(); } queryDetail = null; + if (Config.use_fuzzy_session_variable) { + sessionVariable.initFuzzyModeVariables(); + } } public boolean isTxnModel() { 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 f40b8bfcfb..e28e454512 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 @@ -38,6 +38,7 @@ import java.io.Serializable; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; +import java.util.Random; /** * System variable. @@ -588,6 +589,16 @@ public class SessionVariable implements Serializable, Writable { @VariableMgr.VarAttr(name = INTERNAL_SESSION) public boolean internalSession = false; + // If this fe is in fuzzy mode, then will use initFuzzyModeVariables to generate some variables, + // not the default value set in the code. + public void initFuzzyModeVariables() { + Random random = new Random(); + this.parallelExecInstanceNum = random.nextInt(8) + 1; + this.enableLocalExchange = random.nextBoolean(); + this.disableJoinReorder = random.nextBoolean(); + this.disableStreamPreaggregations = random.nextBoolean(); + } + public String getBlockEncryptionMode() { return blockEncryptionMode; }