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]
