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

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 730b880e41d7ebd63cd1cb87e917976eb3bbde9a
Author: yujun <[email protected]>
AuthorDate: Sun Sep 24 23:46:38 2023 +0800

    [fix](transaction) fix profile null exception cause txn stuck (#24813)
---
 .../src/main/java/org/apache/doris/common/profile/Profile.java |  4 +++-
 .../main/java/org/apache/doris/common/util/RuntimeProfile.java |  5 +++++
 .../main/java/org/apache/doris/load/loadv2/BrokerLoadJob.java  |  4 +++-
 .../main/java/org/apache/doris/load/loadv2/BulkLoadJob.java    |  2 +-
 fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java |  3 ++-
 .../org/apache/doris/transaction/DatabaseTransactionMgr.java   | 10 +++++++---
 6 files changed, 21 insertions(+), 7 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/profile/Profile.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/profile/Profile.java
index e1336ce5af7..bc7250ad2f6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/profile/Profile.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/profile/Profile.java
@@ -61,7 +61,8 @@ public class Profile {
         executionProfile.addToProfileAsChild(rootProfile);
     }
 
-    public synchronized void update(long startTime, Map<String, String> 
summaryInfo, boolean isFinished) {
+    public synchronized void update(long startTime, Map<String, String> 
summaryInfo, boolean isFinished,
+            boolean isSimpleProfile) {
         if (this.isFinished) {
             return;
         }
@@ -70,6 +71,7 @@ public class Profile {
             executionProfile.update(startTime, isFinished);
         }
         rootProfile.computeTimeInProfile();
+        rootProfile.setProfileLevel(isSimpleProfile);
         ProfileManager.getInstance().pushProfile(rootProfile);
         this.isFinished = isFinished;
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/util/RuntimeProfile.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/util/RuntimeProfile.java
index e573ed701fb..4ce3f254c5a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/util/RuntimeProfile.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/RuntimeProfile.java
@@ -70,6 +70,7 @@ public class RuntimeProfile {
 
     private Boolean isDone = false;
     private Boolean isCancel = false;
+    private boolean enableSimplyProfile = false;
 
     public RuntimeProfile(String name) {
         this();
@@ -489,6 +490,10 @@ public class RuntimeProfile {
         computeTimeInProfile(this.counterTotalTime.getValue());
     }
 
+    public void setProfileLevel(boolean isSimpleProfile) {
+        this.enableSimplyProfile = isSimpleProfile;
+    }
+
     private void computeTimeInProfile(long total) {
         if (total == 0) {
             return;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/BrokerLoadJob.java 
b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/BrokerLoadJob.java
index 6dd8675b3b3..d049e0f508c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/BrokerLoadJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/BrokerLoadJob.java
@@ -48,6 +48,7 @@ import org.apache.doris.load.EtlJobType;
 import org.apache.doris.load.FailMsg;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.OriginStatement;
+import org.apache.doris.qe.SessionVariable;
 import org.apache.doris.service.FrontendOptions;
 import org.apache.doris.thrift.TUniqueId;
 import org.apache.doris.transaction.BeginTransactionException;
@@ -321,7 +322,8 @@ public class BrokerLoadJob extends BulkLoadJob {
         if (!enableProfile) {
             return;
         }
-        jobProfile.update(createTimestamp, getSummaryInfo(true), true);
+        jobProfile.update(createTimestamp, getSummaryInfo(true), true,
+                
Boolean.valueOf(sessionVariables.getOrDefault(SessionVariable.ENABLE_SIMPLY_PROFILE,
 "true")));
     }
 
     private Map<String, String> getSummaryInfo(boolean isFinished) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/BulkLoadJob.java 
b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/BulkLoadJob.java
index a6c5b012e07..d5b173d82fc 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/BulkLoadJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/BulkLoadJob.java
@@ -88,7 +88,7 @@ public abstract class BulkLoadJob extends LoadJob {
 
     // sessionVariable's name -> sessionVariable's value
     // we persist these sessionVariables due to the session is not available 
when replaying the job.
-    private Map<String, String> sessionVariables = Maps.newHashMap();
+    protected Map<String, String> sessionVariables = Maps.newHashMap();
 
     public BulkLoadJob(EtlJobType jobType) {
         super(jobType);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
index 6f99fd765a9..5e3767a86ed 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -862,7 +862,8 @@ public class StmtExecutor {
         if (!context.getSessionVariable().enableProfile()) {
             return;
         }
-        profile.update(context.startTime, getSummaryInfo(isFinished), 
isFinished);
+        profile.update(context.startTime, getSummaryInfo(isFinished), 
isFinished,
+                context.getSessionVariable().enableSimplyProfile);
     }
 
     // Analyze one statement to structure in memory.
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java
 
b/fe/fe-core/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java
index 7974cb6a89a..7677c1684f6 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java
@@ -698,7 +698,11 @@ public class DatabaseTransactionMgr {
         } finally {
             writeUnlock();
             // after state transform
-            transactionState.afterStateTransform(TransactionStatus.COMMITTED, 
txnOperated);
+            try {
+                
transactionState.afterStateTransform(TransactionStatus.COMMITTED, txnOperated);
+            } catch (Throwable e) {
+                LOG.warn("afterStateTransform txn {} failed. exception: ", 
transactionState, e);
+            }
         }
 
         // update nextVersion because of the failure of persistent transaction 
resulting in error version
@@ -1063,8 +1067,8 @@ public class DatabaseTransactionMgr {
                 writeUnlock();
                 try {
                     
transactionState.afterStateTransform(TransactionStatus.VISIBLE, txnOperated);
-                } catch (UserException e) {
-                    LOG.warn("afterStateTransform txn {} failed. msg: {}", 
transactionId, e.getMessage());
+                } catch (Throwable e) {
+                    LOG.warn("afterStateTransform txn {} failed. exception: ", 
transactionState, e);
                 }
             }
             updateCatalogAfterVisible(transactionState, db);


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

Reply via email to