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]