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

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


The following commit(s) were added to refs/heads/branch-3.1 by this push:
     new 5e78836ddfb branch-3.1: [fix](editlog) catch exception in publish 
thread and remove synchronized in BackupJob::isDone #53451 (#53556)
5e78836ddfb is described below

commit 5e78836ddfbfa147d2b03d78b3313d346316cac1
Author: Yongqiang YANG <[email protected]>
AuthorDate: Sat Jul 19 09:29:52 2025 +0800

    branch-3.1: [fix](editlog) catch exception in publish thread and remove 
synchronized in BackupJob::isDone #53451 (#53556)
    
    pick #53451
    
    Co-authored-by: Yongqiang YANG <[email protected]>
---
 .../src/main/java/org/apache/doris/backup/BackupJob.java     |  2 +-
 .../src/main/java/org/apache/doris/persist/EditLog.java      | 12 ++++++++++++
 .../org/apache/doris/transaction/PublishVersionDaemon.java   |  9 +++++++--
 regression-test/pipeline/p0/conf/fe.conf                     |  2 +-
 4 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJob.java 
b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJob.java
index 0963e8f6bb3..2e5a4e49320 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJob.java
@@ -478,7 +478,7 @@ public class BackupJob extends AbstractJob implements 
GsonPostProcessable {
     }
 
     @Override
-    public synchronized boolean isDone() {
+    public boolean isDone() {
         return state == BackupJobState.FINISHED || state == 
BackupJobState.CANCELLED;
     }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java 
b/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java
index 0d7a85026eb..aa2e54b9045 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java
@@ -126,15 +126,18 @@ public class EditLog {
 
     // Helper class to hold log edit requests
     private static class EditLogItem {
+        static AtomicLong nextUid = new AtomicLong(0);
         final short op;
         final Writable writable;
         final Object lock = new Object();
         boolean finished = false;
         long logId = -1;
+        long uid = -1;
 
         EditLogItem(short op, Writable writable) {
             this.op = op;
             this.writable = writable;
+            uid = nextUid.getAndIncrement();
         }
     }
 
@@ -190,6 +193,9 @@ public class EditLog {
             // Array to record pairs of logId and num
             List<long[]> logIdNumPairs = new ArrayList<>();
             for (EditLogItem req : batch) {
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("try to flush editLog request: uid={}, op={}", 
req.uid, req.op);
+                }
                 journalBatch.addJournal(req.op, req.writable);
                 if (journalBatch.shouldFlush()) {
                     long logId = journal.write(journalBatch);
@@ -211,6 +217,9 @@ public class EditLog {
                 int num = (int) pair[1];
                 for (int i = 0; i < num && reqIndex < batch.size(); i++, 
reqIndex++) {
                     EditLogItem req = batch.get(reqIndex);
+                    if (LOG.isDebugEnabled()) {
+                        LOG.debug("notify editLog request: uid={}, op={}", 
req.uid, req.op);
+                    }
                     req.logId = logId + i;
                     synchronized (req.lock) {
                         req.finished = true;
@@ -1472,6 +1481,9 @@ public class EditLog {
      */
     public long logEditWithQueue(short op, Writable writable) {
         EditLogItem req = new EditLogItem(op, writable);
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("logEditWithQueue: op = {}, uid = {}", op, req.uid);
+        }
         while (true) {
             try {
                 logEditQueue.put(req);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/transaction/PublishVersionDaemon.java
 
b/fe/fe-core/src/main/java/org/apache/doris/transaction/PublishVersionDaemon.java
index 46241169101..f22bfe4a60d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/transaction/PublishVersionDaemon.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/transaction/PublishVersionDaemon.java
@@ -246,8 +246,13 @@ public class PublishVersionDaemon extends MasterDaemon {
                 transactionState.getTransactionId(), 
transactionState.getDbId(), transactionState.getTransactionId());
         try {
             dbExecutors.get((int) (transactionState.getDbId() % 
Config.publish_thread_pool_num)).execute(() -> {
-                tryFinishTxnSync(transactionState, globalTransactionMgr);
-                publishingTxnIds.remove(transactionState.getTransactionId());
+                try {
+                    tryFinishTxnSync(transactionState, globalTransactionMgr);
+                    
publishingTxnIds.remove(transactionState.getTransactionId());
+                } catch (Throwable e) {
+                    LOG.warn("failed to finish dbId: {}, txnId: {}", 
transactionState.getDbId(),
+                            transactionState.getTransactionId(), e);
+                }
             });
         } catch (Throwable e) {
             LOG.warn("failed to finish transaction {}, dbId: {}, txnId: {}, 
exception: {}",
diff --git a/regression-test/pipeline/p0/conf/fe.conf 
b/regression-test/pipeline/p0/conf/fe.conf
index c33dd4db970..5816d8f1f12 100644
--- a/regression-test/pipeline/p0/conf/fe.conf
+++ b/regression-test/pipeline/p0/conf/fe.conf
@@ -34,7 +34,7 @@ 
JAVA_OPTS_FOR_JDK_17="-Djavax.security.auth.useSubjectCredsOnly=false -Xmx8192m
 
 sys_log_level = INFO
 sys_log_mode = NORMAL
-sys_log_verbose_modules = 
org.apache.doris.common.profile,org.apache.doris.qe.QeProcessorImpl,org.apache.doris.load.ExportTaskExecutor
+sys_log_verbose_modules = 
org.apache.doris.common.profile,org.apache.doris.qe.QeProcessorImpl,org.apache.doris.load.ExportTaskExecutor,org.apache.doris.persist
 arrow_flight_sql_port = 8081
 catalog_trash_expire_second=1
 #enable ssl for test


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

Reply via email to