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

morningman pushed a commit to branch dev-1.0.1
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 239fbada6a8b557d7778b35d4e15089be108badd
Author: Mingyu Chen <[email protected]>
AuthorDate: Mon Jun 20 09:05:50 2022 +0800

    [improvement](variables) change session variable when set global variable 
(#10238)
    
    Currently, when setting variables with `global` keywords, it will not 
affect the
    current session variable's value. That is always make user confused.
    
    This CL mainly changes:
    
    1. Change session variable when set global variable
---
 docs/en/administrator-guide/variables.md           |  4 ++--
 .../main/java/org/apache/doris/qe/VariableMgr.java | 22 +++++++++++-----------
 .../java/org/apache/doris/qe/VariableMgrTest.java  |  2 ++
 3 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/docs/en/administrator-guide/variables.md 
b/docs/en/administrator-guide/variables.md
index e6d6e22d28..3eb2ac3121 100644
--- a/docs/en/administrator-guide/variables.md
+++ b/docs/en/administrator-guide/variables.md
@@ -43,7 +43,8 @@ SHOW VARIABLES LIKE '%time_zone%';
 
 ### Settings
 
-Some variables can be set at global-level or session-only. For global-level, 
the set value will be used in subsequent new session connections. For 
session-only, the variable only works for the current session.
+Note that before version 1.1, after the setting takes effect globally, the 
setting value will be inherited in subsequent new session connections, but the 
value in the current session will remain unchanged.
+After version 1.1 (inclusive), after the setting takes effect globally, the 
setting value will be used in subsequent new session connections, and the value 
in the current session will also change.
 
 For session-only, set by the `SET var_name=xxx;` statement. Such as:
 
@@ -60,7 +61,6 @@ SET GLOBAL exec_mem_limit = 137438953472
 ```
 
 > Note 1: Only ADMIN users can set variable at global-level.
-> Note 2: Global-level variables do not affect variable values in the current 
session, only variables in new sessions.
 
 Variables that support both session-level and global-level setting include:
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java
index 924f923e85..1016bc0a87 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java
@@ -250,19 +250,19 @@ public class VariableMgr {
 
         if (setVar.getType() == SetType.GLOBAL) {
             setGlobalVarAndWriteEditLog(ctx, attr.name(), 
setVar.getValue().getStringValue());
-        } else {
-            // set session variable
-            Field field = ctx.getField();
-            // if stmt is "Select /*+ SET_VAR(...)*/"
-            if (sessionVariable.getIsSingleSetVar()) {
-                try {
-                    sessionVariable.addSessionOriginValue(field, 
field.get(sessionVariable).toString());
-                } catch (Exception e) {
-                    LOG.warn("failed to collect origin session value ", e);
-                }
+        }
+
+        // No matter this is a global setting or not, always set session 
variable.
+        Field field = ctx.getField();
+        // if stmt is "Select /*+ SET_VAR(...)*/"
+        if (sessionVariable.getIsSingleSetVar()) {
+            try {
+                sessionVariable.addSessionOriginValue(field, 
field.get(sessionVariable).toString());
+            } catch (Exception e) {
+                LOG.warn("failed to collect origin session value ", e);
             }
-            setValue(sessionVariable, field, value);
         }
+        setValue(sessionVariable, field, value);
     }
 
     private static void setGlobalVarAndWriteEditLog(VarContext ctx, String 
name, String value) throws DdlException {
diff --git a/fe/fe-core/src/test/java/org/apache/doris/qe/VariableMgrTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/qe/VariableMgrTest.java
index 38e235ce0f..560f2a70d2 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/qe/VariableMgrTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/qe/VariableMgrTest.java
@@ -163,6 +163,8 @@ public class VariableMgrTest {
         SetExecutor executor = new SetExecutor(ctx, stmt);
         executor.execute();
         Assert.assertEquals(5678, 
VariableMgr.newSessionVariable().getMaxExecMemByte());
+        // the session var is also changed.
+        Assert.assertEquals(5678, 
ctx.getSessionVariable().getMaxExecMemByte());
 
         Config.edit_log_roll_num = 100;
         stmt = (SetStmt) UtFrameUtils.parseAndAnalyzeStmt("set global 
exec_mem_limit=7890", ctx);


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

Reply via email to