From 739e043c8d3d9e40896c00e06cd1ad44798a5cf0 Mon Sep 17 00:00:00 2001 From: xueweizhang Date: Fri, 10 Mar 2023 12:02:15 +0800 Subject: [PATCH] [fix](publish) add retry publish when succeed replica num less than quorum and transaction not VISIBLE (#17453) for some reasons, transaction pushlish succeed replica num less than quorum, this transaction's status can not to be VISIBLE, and this publish task of this replica of this tablet on this backend need retry publish success to make transaction VISIBLE when last publish failed. Signed-off-by: nextdreamblue --- .../doris/catalog/TabletInvertedIndex.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java index 2068b93755..52c7ca8786 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java @@ -21,6 +21,7 @@ import org.apache.doris.catalog.Replica.ReplicaState; import org.apache.doris.common.Config; import org.apache.doris.common.Pair; import org.apache.doris.cooldown.CooldownConf; +import org.apache.doris.task.PublishVersionTask; import org.apache.doris.thrift.TPartitionVersionInfo; import org.apache.doris.thrift.TStorageMedium; import org.apache.doris.thrift.TTablet; @@ -248,6 +249,48 @@ public class TabletInvertedIndex { map.put(transactionId, versionInfo); } } + } else if (transactionState.getTransactionStatus() == TransactionStatus.COMMITTED) { + // for some reasons, transaction pushlish succeed replica num less than quorum, + // this transaction's status can not to be VISIBLE, and this publish task of + // this replica of this tablet on this backend need retry publish success to + // make transaction VISIBLE when last publish failed. + Map publishVersionTask = + transactionState.getPublishVersionTasks(); + PublishVersionTask task = publishVersionTask.get(backendId); + if (task != null && task.isFinished()) { + List errorTablets = task.getErrorTablets(); + if (errorTablets != null) { + for (int i = 0; i < errorTablets.size(); i++) { + if (tabletId == errorTablets.get(i)) { + TableCommitInfo tableCommitInfo + = transactionState.getTableCommitInfo( + tabletMeta.getTableId()); + PartitionCommitInfo partitionCommitInfo = + tableCommitInfo == null ? null : + tableCommitInfo.getPartitionCommitInfo(partitionId); + if (partitionCommitInfo != null) { + TPartitionVersionInfo versionInfo + = new TPartitionVersionInfo( + tabletMeta.getPartitionId(), + partitionCommitInfo.getVersion(), 0); + synchronized (transactionsToPublish) { + ListMultimap map + = transactionsToPublish.get( + transactionState.getDbId()); + if (map == null) { + map = ArrayListMultimap.create(); + transactionsToPublish.put( + transactionState.getDbId(), map); + } + map.put(transactionId, versionInfo); + } + } + break; + } + } + } + } + } } } // end for txn id