You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2023/01/31 15:39:04 UTC

[doris] 06/20: [Fix](profile) do not send export profile when enable_profile=false. (#15996)

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

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

commit 24f2511a39bff7ca8e6fc0cfc39f8865b1723c5c
Author: wxy <du...@gmail.com>
AuthorDate: Thu Jan 19 08:06:39 2023 +0800

    [Fix](profile) do not send export profile when enable_profile=false. (#15996)
---
 .../main/java/org/apache/doris/load/ExportJob.java |  10 +-
 .../org/apache/doris/task/ExportExportingTask.java |   3 +
 .../org/apache/doris/qe/SessionVariablesTest.java  | 131 ++++++++++++++++++---
 3 files changed, 125 insertions(+), 19 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/ExportJob.java b/fe/fe-core/src/main/java/org/apache/doris/load/ExportJob.java
index a7f6bef921..3b79ca70de 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/ExportJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/ExportJob.java
@@ -129,12 +129,11 @@ public class ExportJob implements Writable {
     private String lineDelimiter;
     private Map<String, String> properties = Maps.newHashMap();
     private List<String> partitions;
-
     private TableName tableName;
-
     private String sql = "";
-
     private JobState state;
+    // If set to true, the profile of export job with be pushed to ProfileManager
+    private volatile boolean enableProfile = false;
     private long createTimeMs;
     private long startTimeMs;
     private long finishTimeMs;
@@ -239,6 +238,7 @@ public class ExportJob implements Writable {
         if (ConnectContext.get() != null) {
             SessionVariable var = ConnectContext.get().getSessionVariable();
             this.sessionVariables.put(SessionVariable.SQL_MODE, Long.toString(var.getSqlMode()));
+            this.enableProfile = var.enableProfile();
         } else {
             this.sessionVariables.put(SessionVariable.SQL_MODE, String.valueOf(SqlModeHelper.MODE_DEFAULT));
         }
@@ -751,6 +751,10 @@ public class ExportJob implements Writable {
         return queryId;
     }
 
+    public boolean getEnableProfile() {
+        return enableProfile;
+    }
+
     @Override
     public String toString() {
         return "ExportJob [jobId=" + id
diff --git a/fe/fe-core/src/main/java/org/apache/doris/task/ExportExportingTask.java b/fe/fe-core/src/main/java/org/apache/doris/task/ExportExportingTask.java
index fe6dde27fb..7d6a3b3c74 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/task/ExportExportingTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/task/ExportExportingTask.java
@@ -271,6 +271,9 @@ public class ExportExportingTask extends MasterTask {
     }
 
     private void registerProfile() {
+        if (!job.getEnableProfile()) {
+            return;
+        }
         initProfile();
         for (RuntimeProfile p : fragmentProfiles) {
             profile.addChild(p);
diff --git a/fe/fe-core/src/test/java/org/apache/doris/qe/SessionVariablesTest.java b/fe/fe-core/src/test/java/org/apache/doris/qe/SessionVariablesTest.java
index c1911cc687..947e83d95d 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/qe/SessionVariablesTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/qe/SessionVariablesTest.java
@@ -17,24 +17,39 @@
 
 package org.apache.doris.qe;
 
+import org.apache.doris.analysis.ExportStmt;
+import org.apache.doris.analysis.SetStmt;
+import org.apache.doris.common.FeConstants;
+import org.apache.doris.common.util.ProfileManager;
+import org.apache.doris.common.util.RuntimeProfile;
+import org.apache.doris.load.ExportJob;
+import org.apache.doris.task.ExportExportingTask;
 import org.apache.doris.thrift.TQueryOptions;
+import org.apache.doris.utframe.TestWithFeService;
 
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import com.google.common.collect.Lists;
+import mockit.Expectations;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import java.lang.reflect.Field;
 import java.util.Map;
 
-public class SessionVariablesTest {
+public class SessionVariablesTest extends TestWithFeService {
 
-    private static SessionVariable sessionVariable;
-    private static int numOfForwardVars;
+    private SessionVariable sessionVariable;
+    private int numOfForwardVars;
+    private ProfileManager profileManager = ProfileManager.getInstance();
 
-    @BeforeClass
-    public static void beforeClass() throws Exception {
-        sessionVariable = new SessionVariable();
+    @Override
+    protected void runBeforeAll() throws Exception {
+        FeConstants.runningUnitTest = true;
+        createDatabase("test_d");
+        useDatabase("test_d");
+        createTable("create table test_t1 \n" + "(k1 int, k2 int) distributed by hash(k1) buckets 1\n"
+                + "properties(\"replication_num\" = \"1\");");
 
+        sessionVariable = new SessionVariable();
         Field[] fields = SessionVariable.class.getFields();
         for (Field f : fields) {
             VariableMgr.VarAttr varAttr = f.getAnnotation(VariableMgr.VarAttr.class);
@@ -48,23 +63,107 @@ public class SessionVariablesTest {
     @Test
     public void testForwardSessionVariables() {
         Map<String, String> vars = sessionVariable.getForwardVariables();
-        Assert.assertTrue(numOfForwardVars >= 6);
-        Assert.assertEquals(numOfForwardVars, vars.size());
+        Assertions.assertTrue(numOfForwardVars >= 6);
+        Assertions.assertEquals(numOfForwardVars, vars.size());
 
         vars.put(SessionVariable.ENABLE_PROFILE, "true");
         sessionVariable.setForwardedSessionVariables(vars);
-        Assert.assertEquals(true, sessionVariable.enableProfile);
+        Assertions.assertEquals(true, sessionVariable.enableProfile);
     }
 
     @Test
     public void testForwardQueryOptions() {
         TQueryOptions queryOptions = sessionVariable.getQueryOptionVariables();
-        Assert.assertTrue(queryOptions.isSetMemLimit());
-        Assert.assertFalse(queryOptions.isSetLoadMemLimit());
-        Assert.assertTrue(queryOptions.isSetQueryTimeout());
+        Assertions.assertTrue(queryOptions.isSetMemLimit());
+        Assertions.assertFalse(queryOptions.isSetLoadMemLimit());
+        Assertions.assertTrue(queryOptions.isSetQueryTimeout());
 
         queryOptions.setQueryTimeout(123);
         sessionVariable.setForwardedSessionVariables(queryOptions);
-        Assert.assertEquals(123, sessionVariable.getQueryTimeoutS());
+        Assertions.assertEquals(123, sessionVariable.getQueryTimeoutS());
+    }
+
+    @Test
+    public void testEnableProfile() {
+        try {
+            SetStmt setStmt = (SetStmt) parseAndAnalyzeStmt("set enable_profile=true", connectContext);
+            SetExecutor setExecutor = new SetExecutor(connectContext, setStmt);
+            setExecutor.execute();
+
+            ExportStmt exportStmt = (ExportStmt)
+                    parseAndAnalyzeStmt("EXPORT TABLE test_d.test_t1 TO \"file:///tmp/test_t1\"", connectContext);
+            ExportJob job = new ExportJob(1234);
+            job.setJob(exportStmt);
+
+            new Expectations(job) {
+                {
+                    job.getState();
+                    minTimes = 0;
+                    result = ExportJob.JobState.EXPORTING;
+
+                    job.getCoordList();
+                    minTimes = 0;
+                    result = Lists.newArrayList();
+                }
+            };
+
+            new Expectations(profileManager) {
+                {
+                    profileManager.pushProfile((RuntimeProfile) any);
+                    // if enable_profile=true, method pushProfile will be called once
+                    times = 1;
+                }
+            };
+
+            ExportExportingTask task = new ExportExportingTask(job);
+            task.run();
+            Assertions.assertTrue(job.isFinalState());
+        } catch (Exception e) {
+            e.printStackTrace();
+            Assertions.fail(e.getMessage());
+        }
+
+    }
+
+    @Test
+    public void testDisableProfile() {
+        try {
+            SetStmt setStmt = (SetStmt) parseAndAnalyzeStmt("set enable_profile=false", connectContext);
+            SetExecutor setExecutor = new SetExecutor(connectContext, setStmt);
+            setExecutor.execute();
+
+            ExportStmt exportStmt = (ExportStmt)
+                    parseAndAnalyzeStmt("EXPORT TABLE test_d.test_t1 TO \"file:///tmp/test_t1\"", connectContext);
+            ExportJob job = new ExportJob(1234);
+            job.setJob(exportStmt);
+
+            new Expectations(job) {
+                {
+                    job.getState();
+                    minTimes = 0;
+                    result = ExportJob.JobState.EXPORTING;
+
+                    job.getCoordList();
+                    minTimes = 0;
+                    result = Lists.newArrayList();
+                }
+            };
+
+            new Expectations(profileManager) {
+                {
+                    profileManager.pushProfile((RuntimeProfile) any);
+                    // if enable_profile=false, method pushProfile will not be called
+                    times = 0;
+                }
+            };
+
+            ExportExportingTask task = new ExportExportingTask(job);
+            task.run();
+            Assertions.assertTrue(job.isFinalState());
+        } catch (Exception e) {
+            e.printStackTrace();
+            Assertions.fail(e.getMessage());
+        }
+
     }
 }


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