You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by kx...@apache.org on 2023/10/07 15:25:42 UTC
[doris] 01/21: [fix](transaction) fix profile null exception cause txn stuck (#24813)
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 <yu...@gmail.com>
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: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org