You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by li...@apache.org on 2020/07/24 01:59:11 UTC
[incubator-doris] branch master updated: Optimize the logic of
processing unfinishedTask when transaction is publishTimeout (#4053)
This is an automated email from the ASF dual-hosted git repository.
lichaoyong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new 28f4d30 Optimize the logic of processing unfinishedTask when transaction is publishTimeout (#4053)
28f4d30 is described below
commit 28f4d305426bd815d172a615f6724033088932c9
Author: caiconghui <55...@users.noreply.github.com>
AuthorDate: Thu Jul 23 20:59:01 2020 -0500
Optimize the logic of processing unfinishedTask when transaction is publishTimeout (#4053)
This PR is to optimize the logic of processing unfinishedTask when transaction is publishTimeout, we find errorReplica by
"db -> table -> partition -> index -> tablet(backendId) -> replica" path.
---
.../doris/transaction/PublishVersionDaemon.java | 50 ++++++++++++++--------
1 file changed, 31 insertions(+), 19 deletions(-)
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 9e68bee..0732929 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
@@ -18,9 +18,14 @@
package org.apache.doris.transaction;
import org.apache.doris.catalog.Catalog;
+import org.apache.doris.catalog.Database;
+import org.apache.doris.catalog.MaterializedIndex;
+import org.apache.doris.catalog.OlapTable;
+import org.apache.doris.catalog.Partition;
import org.apache.doris.catalog.Replica;
+import org.apache.doris.catalog.Table;
+import org.apache.doris.catalog.Tablet;
import org.apache.doris.catalog.TabletInvertedIndex;
-import org.apache.doris.catalog.TabletMeta;
import org.apache.doris.common.Config;
import org.apache.doris.common.UserException;
import org.apache.doris.common.util.MasterDaemon;
@@ -180,28 +185,35 @@ public class PublishVersionDaemon extends MasterDaemon {
continue;
}
- // get all tablets of these error partitions, and mark their replicas as error.
- // current we don't have partition to tablet map in FE, so here we use an inefficient way.
- // TODO(cmy): this is inefficient, but just keep it simple. will change it later.
- List<Long> tabletIds = tabletInvertedIndex.getTabletIdsByBackendId(unfinishedTask.getBackendId());
- List<TabletMeta> tabletMetaList = tabletInvertedIndex.getTabletMetaList(tabletIds);
- for (int i = 0; i < tabletIds.size(); i++) {
- long tabletId = tabletIds.get(i);
- TabletMeta tabletMeta = tabletMetaList.get(i);
- if (tabletMeta == TabletInvertedIndex.NOT_EXIST_TABLET_META) {
+ Database db = Catalog.getCurrentCatalog().getDb(transactionState.getDbId());
+ if (db == null) {
+ LOG.warn("Database [{}] has been dropped.", transactionState.getDbId());
+ continue;
+ }
+
+ for (int i = 0; i < transactionState.getTableIdList().size(); i++) {
+ long tableId = transactionState.getTableIdList().get(i);
+ Table table = db.getTable(tableId);
+ if (table == null || table.getType() != Table.TableType.OLAP) {
+ LOG.warn("Table [{}] in databse [{}] has been dropped.", tableId, db.getFullName());
continue;
}
- long partitionId = tabletMeta.getPartitionId();
- if (errorPartitionIds.contains(partitionId)) {
- Replica replica = tabletInvertedIndex.getReplica(tabletId,
- unfinishedTask.getBackendId());
- if (replica != null) {
- publishErrorReplicaIds.add(replica.getId());
- } else {
- LOG.info("could not find related replica with tabletid={}, backendid={}",
- tabletId, unfinishedTask.getBackendId());
+ OlapTable olapTable = (OlapTable) table;
+ for (Long errorPartitionId : errorPartitionIds) {
+ Partition partition = olapTable.getPartition(errorPartitionId);
+ if (partition != null) {
+ List<MaterializedIndex> materializedIndexList = partition.getMaterializedIndices(MaterializedIndex.IndexExtState.ALL);
+ for (MaterializedIndex materializedIndex : materializedIndexList) {
+ for (Tablet tablet : materializedIndex.getTablets()) {
+ Replica replica = tablet.getReplicaByBackendId(unfinishedTask.getBackendId());
+ if (replica != null) {
+ publishErrorReplicaIds.add(replica.getId());
+ }
+ }
+ }
}
}
+
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org