[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 <zxw520blue1@163.com>
This commit is contained in:
@ -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<Long, PublishVersionTask> publishVersionTask =
|
||||
transactionState.getPublishVersionTasks();
|
||||
PublishVersionTask task = publishVersionTask.get(backendId);
|
||||
if (task != null && task.isFinished()) {
|
||||
List<Long> 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<Long, TPartitionVersionInfo> 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
|
||||
|
||||
Reference in New Issue
Block a user