This is an automated email from the ASF dual-hosted git repository. dataroaring pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 9c720b6eb0a [fix](cloud) fix commit txn failed for mow tables (#41793) 9c720b6eb0a is described below commit 9c720b6eb0a181be51d1008cd0e6c68d3187334f Author: meiyi <myime...@gmail.com> AuthorDate: Sun Oct 20 11:02:16 2024 +0800 [fix](cloud) fix commit txn failed for mow tables (#41793) When s3 load to 2 tables: 1 is non mow table and 1 is mow table. If the tablet commit info for mow table is empty, the commit will get error: ``` msg:errCode = 2, detailMessage = The partition info is empty, table may be dropped, txnid=570859248863232 ``` --- .../transaction/CloudGlobalTransactionMgr.java | 37 ++++++++++++++-------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/cloud/transaction/CloudGlobalTransactionMgr.java b/fe/fe-core/src/main/java/org/apache/doris/cloud/transaction/CloudGlobalTransactionMgr.java index c7dc5f73a92..8be2f70aa5e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/cloud/transaction/CloudGlobalTransactionMgr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/cloud/transaction/CloudGlobalTransactionMgr.java @@ -470,8 +470,8 @@ public class CloudGlobalTransactionMgr implements GlobalTransactionMgrIface { "disable_load_job is set to true, all load jobs are not allowed"); } - List<OlapTable> mowTableList = getMowTableList(tableList); - if (tabletCommitInfos != null && !tabletCommitInfos.isEmpty() && !mowTableList.isEmpty()) { + List<OlapTable> mowTableList = getMowTableList(tableList, tabletCommitInfos); + if (!mowTableList.isEmpty()) { calcDeleteBitmapForMow(dbId, mowTableList, transactionId, tabletCommitInfos); } @@ -482,12 +482,8 @@ public class CloudGlobalTransactionMgr implements GlobalTransactionMgrIface { .setCloudUniqueId(Config.cloud_unique_id) .addAllBaseTabletIds(getBaseTabletsFromTables(tableList, tabletCommitInfos)) .setEnableTxnLazyCommit(Config.enable_cloud_txn_lazy_commit); - - // if tablet commit info is empty, no need to pass mowTableList to meta service. - if (tabletCommitInfos != null && !tabletCommitInfos.isEmpty()) { - for (OlapTable olapTable : mowTableList) { - builder.addMowTableIds(olapTable.getId()); - } + for (OlapTable olapTable : mowTableList) { + builder.addMowTableIds(olapTable.getId()); } if (txnCommitAttachment != null) { @@ -601,14 +597,27 @@ public class CloudGlobalTransactionMgr implements GlobalTransactionMgrIface { return txnState; } - private List<OlapTable> getMowTableList(List<Table> tableList) { + // return mow tables with contains tablet commit info + private List<OlapTable> getMowTableList(List<Table> tableList, List<TabletCommitInfo> tabletCommitInfos) { + if (tabletCommitInfos == null || tabletCommitInfos.isEmpty()) { + return Lists.newArrayList(); + } List<OlapTable> mowTableList = new ArrayList<>(); + TabletInvertedIndex tabletInvertedIndex = Env.getCurrentEnv().getTabletInvertedIndex(); for (Table table : tableList) { - if ((table instanceof OlapTable)) { - OlapTable olapTable = (OlapTable) table; - if (olapTable.getEnableUniqueKeyMergeOnWrite()) { - mowTableList.add(olapTable); - } + if (!(table instanceof OlapTable)) { + continue; + } + OlapTable olapTable = (OlapTable) table; + if (!olapTable.getEnableUniqueKeyMergeOnWrite()) { + continue; + } + boolean hasTabletCommitInfo = tabletCommitInfos.stream().anyMatch(ci -> { + TabletMeta tabletMeta = tabletInvertedIndex.getTabletMeta(ci.getTabletId()); + return tabletMeta != null && tabletMeta.getTableId() == olapTable.getId(); + }); + if (hasTabletCommitInfo) { + mowTableList.add(olapTable); } } return mowTableList; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org