This is an automated email from the ASF dual-hosted git repository.
zhaoc 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 6928c72 Optimize the logic for getting TabletMeta from
TabletInvertedIndex to reduce frequency of getting read lock (#3815)
6928c72 is described below
commit 6928c727038bc5449fb700e200c3fbc206edfa1b
Author: caiconghui <[email protected]>
AuthorDate: Sat Jun 13 12:46:59 2020 +0800
Optimize the logic for getting TabletMeta from TabletInvertedIndex to
reduce frequency of getting read lock (#3815)
This PR is to optimize the logic for getting tabletMeta from
TabletInvertedIndex to reduce frequence of getting read lock
---
.../apache/doris/catalog/TabletInvertedIndex.java | 84 +++-------------------
.../java/org/apache/doris/master/MasterImpl.java | 48 ++++++++-----
.../org/apache/doris/master/ReportHandler.java | 73 ++++++++++++-------
.../java/org/apache/doris/qe/ShowExecutor.java | 11 +--
.../doris/transaction/DatabaseTransactionMgr.java | 18 +++--
.../doris/transaction/PublishVersionDaemon.java | 11 ++-
6 files changed, 116 insertions(+), 129 deletions(-)
diff --git a/fe/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java
b/fe/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java
index 74d7beb..acd3096 100644
--- a/fe/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java
+++ b/fe/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java
@@ -40,6 +40,7 @@ import com.google.common.collect.Table;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -58,6 +59,9 @@ public class TabletInvertedIndex {
public static final int NOT_EXIST_VALUE = -1;
+ public static final TabletMeta NOT_EXIST_TABLET_META = new
TabletMeta(NOT_EXIST_VALUE, NOT_EXIST_VALUE,
+ NOT_EXIST_VALUE, NOT_EXIST_VALUE, NOT_EXIST_VALUE,
TStorageMedium.HDD);
+
private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
// tablet id -> tablet meta
@@ -252,43 +256,6 @@ public class TabletInvertedIndex {
tabletMigrationMap.size(), transactionsToClear.size(),
transactionsToPublish.size(), (end - start));
}
- public long getDbId(long tabletId) {
- readLock();
- try {
- if (tabletMetaMap.containsKey(tabletId)) {
- return tabletMetaMap.get(tabletId).getDbId();
- }
- return NOT_EXIST_VALUE;
- } finally {
- readUnlock();
- }
- }
-
- public long getTableId(long tabletId) {
- readLock();
- try {
- if (tabletMetaMap.containsKey(tabletId)) {
- return tabletMetaMap.get(tabletId).getTableId();
- }
- return NOT_EXIST_VALUE;
- } finally {
- readUnlock();
- }
- }
-
- public TabletMeta getTabletMetaByReplica(long replicaId) {
- readLock();
- try {
- Long tabletId = replicaToTabletMap.get(replicaId);
- if (tabletId == null) {
- return null;
- }
- return tabletMetaMap.get(tabletId);
- } finally {
- readUnlock();
- }
- }
-
public Long getTabletIdByReplica(long replicaId) {
readLock();
try {
@@ -298,57 +265,28 @@ public class TabletInvertedIndex {
}
}
- public long getPartitionId(long tabletId) {
- readLock();
- try {
- if (tabletMetaMap.containsKey(tabletId)) {
- return tabletMetaMap.get(tabletId).getPartitionId();
- }
- return NOT_EXIST_VALUE;
- } finally {
- readUnlock();
- }
- }
-
- public long getIndexId(long tabletId) {
+ public TabletMeta getTabletMeta(long tabletId) {
readLock();
try {
- if (tabletMetaMap.containsKey(tabletId)) {
- return tabletMetaMap.get(tabletId).getIndexId();
- }
- return NOT_EXIST_VALUE;
+ return tabletMetaMap.get(tabletId);
} finally {
readUnlock();
}
}
- public int getEffectiveSchemaHash(long tabletId) {
- // always get old schema hash(as effective one)
+ public List<TabletMeta> getTabletMetaList(List<Long> tabletIdList) {
+ List<TabletMeta> tabletMetaList = new ArrayList<>(tabletIdList.size());
readLock();
try {
- if (tabletMetaMap.containsKey(tabletId)) {
- return tabletMetaMap.get(tabletId).getOldSchemaHash();
+ for (Long tabletId : tabletIdList) {
+ tabletMetaList.add(tabletMetaMap.getOrDefault(tabletId,
NOT_EXIST_TABLET_META));
}
- return NOT_EXIST_VALUE;
+ return tabletMetaList;
} finally {
readUnlock();
}
}
- public TabletMeta getTabletMeta(long tabletId) {
- readLock();
- try {
- return tabletMetaMap.get(tabletId);
- } finally {
- readUnlock();
- }
- }
-
- public Set<Long> getTabletBackends(long tabletId) {
- Map<Long, Replica> backendIdToReplica = replicaMetaTable.row(tabletId);
- return backendIdToReplica.keySet();
- }
-
private boolean needSync(Replica replicaInFe, TTabletInfo
backendTabletInfo) {
if (backendTabletInfo.isSetUsed() && !backendTabletInfo.isUsed()) {
// tablet is bad, do not sync
diff --git a/fe/src/main/java/org/apache/doris/master/MasterImpl.java
b/fe/src/main/java/org/apache/doris/master/MasterImpl.java
index 25c3f9f..9d403cd 100644
--- a/fe/src/main/java/org/apache/doris/master/MasterImpl.java
+++ b/fe/src/main/java/org/apache/doris/master/MasterImpl.java
@@ -76,6 +76,7 @@ import org.apache.thrift.TException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
+import java.util.stream.Collectors;
public class MasterImpl {
private static final Logger LOG = LogManager.getLogger(MasterImpl.class);
@@ -345,6 +346,11 @@ public class MasterImpl {
long reportVersion = request.getReport_version();
Catalog.getCurrentSystemInfo().updateBackendReportVersion(task.getBackendId(),
reportVersion,
task.getDbId());
+
+ List<Long> tabletIds = finishTabletInfos.stream().map(
+ tTabletInfo ->
tTabletInfo.getTablet_id()).collect(Collectors.toList());
+ List<TabletMeta> tabletMetaList =
Catalog.getCurrentInvertedIndex().getTabletMetaList(tabletIds);
+
// handle load job
// TODO yiguolei: why delete should check request version and task
version?
if (pushTask.getPushType() == TPushType.LOAD ||
pushTask.getPushType() == TPushType.LOAD_DELETE) {
@@ -353,11 +359,12 @@ public class MasterImpl {
if (job == null) {
throw new MetaNotFoundException("cannot find load job,
job[" + loadJobId + "]");
}
- for (TTabletInfo tTabletInfo : finishTabletInfos) {
- checkReplica(olapTable, partition, backendId, pushIndexId,
pushTabletId,
- tTabletInfo, pushState);
- Replica replica = findRelatedReplica(olapTable, partition,
- backendId, tTabletInfo);
+
+ for (int i = 0; i < tabletMetaList.size(); i++) {
+ TabletMeta tabletMeta = tabletMetaList.get(i);
+ checkReplica(finishTabletInfos.get(i), tabletMeta);
+ long tabletId = tabletIds.get(i);
+ Replica replica = findRelatedReplica(olapTable, partition,
backendId, tabletId, tabletMeta.getIndexId());
// if the replica is under schema change, could not find
the replica with aim schema hash
if (replica != null) {
job.addFinishedReplica(replica);
@@ -368,9 +375,11 @@ public class MasterImpl {
if (deleteJob == null) {
throw new MetaNotFoundException("cannot find delete job,
job[" + transactionId + "]");
}
- for (TTabletInfo tTabletInfo : finishTabletInfos) {
+ for (int i = 0; i < tabletMetaList.size(); i++) {
+ TabletMeta tabletMeta = tabletMetaList.get(i);
+ long tabletId = tabletIds.get(i);
Replica replica = findRelatedReplica(olapTable, partition,
- backendId, tTabletInfo);
+ backendId, tabletId, tabletMeta.getIndexId());
if (replica != null) {
deleteJob.addFinishedReplica(pushTabletId, replica);
pushTask.countDownLatch(backendId, pushTabletId);
@@ -388,8 +397,7 @@ public class MasterImpl {
}
}
- private void checkReplica(OlapTable olapTable, Partition partition, long
backendId,
- long pushIndexId, long pushTabletId, TTabletInfo tTabletInfo,
PartitionState pushState)
+ private void checkReplica(TTabletInfo tTabletInfo, TabletMeta tabletMeta)
throws MetaNotFoundException {
long tabletId = tTabletInfo.getTablet_id();
int schemaHash = tTabletInfo.getSchema_hash();
@@ -398,8 +406,7 @@ public class MasterImpl {
// the check replica will failed
// should use tabletid not pushTabletid because in rollup state, the
push tabletid != tabletid
// and tablet meta will not contain rollupindex's schema hash
- TabletMeta tabletMeta =
Catalog.getCurrentInvertedIndex().getTabletMeta(tabletId);
- if (tabletMeta == null) {
+ if (tabletMeta == null || tabletMeta ==
TabletInvertedIndex.NOT_EXIST_TABLET_META) {
// rollup may be dropped
throw new MetaNotFoundException("tablet " + tabletId + " does not
exist");
}
@@ -411,10 +418,8 @@ public class MasterImpl {
}
private Replica findRelatedReplica(OlapTable olapTable, Partition
partition,
- long backendId, TTabletInfo
tTabletInfo)
+ long backendId, long
tabletId, long indexId)
throws MetaNotFoundException {
- long tabletId = tTabletInfo.getTablet_id();
- long indexId = Catalog.getCurrentInvertedIndex().getIndexId(tabletId);
// both normal index and rollingup index are in inverted index
// this means the index is dropped during load
if (indexId == TabletInvertedIndex.NOT_EXIST_VALUE) {
@@ -529,10 +534,16 @@ public class MasterImpl {
// update replica version and versionHash
List<ReplicaPersistInfo> infos = new
LinkedList<ReplicaPersistInfo>();
- for (TTabletInfo tTabletInfo : finishTabletInfos) {
+ List<Long> tabletIds = finishTabletInfos.stream().map(
+ finishTabletInfo ->
finishTabletInfo.getTablet_id()).collect(Collectors.toList());
+ List<TabletMeta> tabletMetaList =
Catalog.getCurrentInvertedIndex().getTabletMetaList(tabletIds);
+ for (int i = 0; i < tabletMetaList.size(); i++) {
+ TabletMeta tabletMeta = tabletMetaList.get(i);
+ TTabletInfo tTabletInfo = finishTabletInfos.get(i);
+ long indexId = tabletMeta.getIndexId();
ReplicaPersistInfo info = updateReplicaInfo(olapTable,
partition,
- backendId,
pushIndexId, pushTabletId,
- tTabletInfo,
pushState);
+ backendId, pushIndexId, indexId,
+ tTabletInfo, pushState);
if (info != null) {
infos.add(info);
}
@@ -623,7 +634,7 @@ public class MasterImpl {
}
private ReplicaPersistInfo updateReplicaInfo(OlapTable olapTable,
Partition partition,
- long backendId, long
pushIndexId, long pushTabletId,
+ long backendId, long
pushIndexId, long indexId,
TTabletInfo tTabletInfo,
PartitionState pushState)
throws MetaNotFoundException {
long tabletId = tTabletInfo.getTablet_id();
@@ -633,7 +644,6 @@ public class MasterImpl {
long rowCount = tTabletInfo.getRow_count();
long dataSize = tTabletInfo.getData_size();
- long indexId = Catalog.getCurrentInvertedIndex().getIndexId(tabletId);
if (indexId != pushIndexId) {
// this may be a rollup tablet
if (pushState != PartitionState.ROLLUP && indexId !=
TabletInvertedIndex.NOT_EXIST_VALUE) {
diff --git a/fe/src/main/java/org/apache/doris/master/ReportHandler.java
b/fe/src/main/java/org/apache/doris/master/ReportHandler.java
index 6f13734..18550af 100644
--- a/fe/src/main/java/org/apache/doris/master/ReportHandler.java
+++ b/fe/src/main/java/org/apache/doris/master/ReportHandler.java
@@ -32,6 +32,7 @@ import org.apache.doris.catalog.Replica.ReplicaState;
import org.apache.doris.catalog.Tablet;
import org.apache.doris.catalog.Tablet.TabletStatus;
import org.apache.doris.catalog.TabletInvertedIndex;
+import org.apache.doris.catalog.TabletMeta;
import org.apache.doris.clone.TabletSchedCtx;
import org.apache.doris.common.Config;
import org.apache.doris.common.MetaNotFoundException;
@@ -388,21 +389,26 @@ public class ReportHandler extends Daemon {
List<Long> tabletIds = tabletSyncMap.get(dbId);
LOG.info("before sync tablets in db[{}]. report num: {}.
backend[{}]",
dbId, tabletIds.size(), backendId);
-
- for (Long tabletId : tabletIds) {
- long tableId = invertedIndex.getTableId(tabletId);
+ List<TabletMeta> tabletMetaList =
invertedIndex.getTabletMetaList(tabletIds);
+ for (int i = 0; i < tabletMetaList.size(); i++) {
+ TabletMeta tabletMeta = tabletMetaList.get(i);
+ if (tabletMeta ==
TabletInvertedIndex.NOT_EXIST_TABLET_META) {
+ continue;
+ }
+ long tabletId = tabletIds.get(i);
+ long tableId = tabletMeta.getTableId();
OlapTable olapTable = (OlapTable) db.getTable(tableId);
if (olapTable == null) {
continue;
}
- long partitionId = invertedIndex.getPartitionId(tabletId);
+ long partitionId = tabletMeta.getPartitionId();
Partition partition = olapTable.getPartition(partitionId);
if (partition == null) {
continue;
}
- long indexId = invertedIndex.getIndexId(tabletId);
+ long indexId = tabletMeta.getIndexId();
MaterializedIndex index = partition.getIndex(indexId);
if (index == null) {
continue;
@@ -512,14 +518,20 @@ public class ReportHandler extends Daemon {
try {
int deleteCounter = 0;
List<Long> tabletIds = tabletDeleteFromMeta.get(dbId);
- for (Long tabletId : tabletIds) {
- long tableId = invertedIndex.getTableId(tabletId);
+ List<TabletMeta> tabletMetaList =
invertedIndex.getTabletMetaList(tabletIds);
+ for (int i = 0; i < tabletMetaList.size(); i++) {
+ TabletMeta tabletMeta = tabletMetaList.get(i);
+ if (tabletMeta ==
TabletInvertedIndex.NOT_EXIST_TABLET_META) {
+ continue;
+ }
+ long tabletId = tabletIds.get(i);
+ long tableId = tabletMeta.getTableId();
OlapTable olapTable = (OlapTable) db.getTable(tableId);
if (olapTable == null) {
continue;
}
- long partitionId = invertedIndex.getPartitionId(tabletId);
+ long partitionId = tabletMeta.getPartitionId();
Partition partition = olapTable.getPartition(partitionId);
if (partition == null) {
continue;
@@ -527,7 +539,7 @@ public class ReportHandler extends Daemon {
short replicationNum =
olapTable.getPartitionInfo().getReplicationNum(partition.getId());
- long indexId = invertedIndex.getIndexId(tabletId);
+ long indexId = tabletMeta.getIndexId();
MaterializedIndex index = partition.getIndex(indexId);
if (index == null) {
continue;
@@ -712,10 +724,14 @@ public class ReportHandler extends Daemon {
AgentBatchTask batchTask = new AgentBatchTask();
for (TStorageMedium storageMedium : tabletMetaMigrationMap.keySet()) {
List<Long> tabletIds = tabletMetaMigrationMap.get(storageMedium);
- for (Long tabletId : tabletIds) {
+ List<TabletMeta> tabletMetaList =
invertedIndex.getTabletMetaList(tabletIds);
+ for (int i = 0; i < tabletMetaList.size(); i++) {
+ long tabletId = tabletIds.get(i);
+ TabletMeta tabletMeta = tabletMetaList.get(i);
+ // always get old schema hash(as effective one)
+ int effectiveSchemaHash = tabletMeta.getOldSchemaHash();
StorageMediaMigrationTask task = new
StorageMediaMigrationTask(backendId, tabletId,
-
invertedIndex.getEffectiveSchemaHash(tabletId),
- storageMedium);
+ effectiveSchemaHash, storageMedium);
batchTask.addTask(task);
}
}
@@ -763,20 +779,27 @@ public class ReportHandler extends Daemon {
}
db.writeLock();
try {
- for (Long tabletId : tabletRecoveryMap.get(dbId)) {
- long tableId = invertedIndex.getTableId(tabletId);
+ List<Long> tabletIds = tabletRecoveryMap.get(dbId);
+ List<TabletMeta> tabletMetaList =
invertedIndex.getTabletMetaList(tabletIds);
+ for (int i = 0; i < tabletMetaList.size(); i++) {
+ TabletMeta tabletMeta = tabletMetaList.get(i);
+ if (tabletMeta ==
TabletInvertedIndex.NOT_EXIST_TABLET_META) {
+ continue;
+ }
+ long tabletId = tabletIds.get(i);
+ long tableId = tabletMeta.getTableId();
OlapTable olapTable = (OlapTable) db.getTable(tableId);
if (olapTable == null) {
continue;
}
- long partitionId =
invertedIndex.getPartitionId(tabletId);
+ long partitionId = tabletMeta.getPartitionId();
Partition partition =
olapTable.getPartition(partitionId);
if (partition == null) {
continue;
}
- long indexId = invertedIndex.getIndexId(tabletId);
+ long indexId = tabletMeta.getIndexId();
MaterializedIndex index = partition.getIndex(indexId);
if (index == null) {
continue;
@@ -843,8 +866,6 @@ public class ReportHandler extends Daemon {
// need to write edit log the sync the bad info to other FEs
Catalog.getCurrentCatalog().getEditLog().logBackendTabletsInfo(backendTabletsInfo);
}
-
- return;
} else {
LOG.warn("force recovery is enable. use recovery tablet task to
recover");
AgentBatchTask batchTask = new AgentBatchTask();
@@ -892,9 +913,10 @@ public class ReportHandler extends Daemon {
}
long tabletId = tabletInfo.getTablet_id();
boolean beIsInMemory = tabletInfo.is_in_memory;
- long dbId = invertedIndex.getDbId(tabletId);
- long tableId = invertedIndex.getTableId(tabletId);
- long partitionId = invertedIndex.getPartitionId(tabletId);
+ TabletMeta tabletMeta = invertedIndex.getTabletMeta(tabletId);
+ long dbId = tabletMeta != null ? tabletMeta.getDbId() :
TabletInvertedIndex.NOT_EXIST_VALUE;
+ long tableId = tabletMeta != null ? tabletMeta.getTableId() :
TabletInvertedIndex.NOT_EXIST_VALUE;
+ long partitionId = tabletMeta != null ?
tabletMeta.getPartitionId() : TabletInvertedIndex.NOT_EXIST_VALUE;
Database db = Catalog.getCurrentCatalog().getDb(dbId);
if (db == null) {
@@ -946,10 +968,11 @@ public class ReportHandler extends Daemon {
TabletInvertedIndex invertedIndex = Catalog.getCurrentInvertedIndex();
SystemInfoService infoService = Catalog.getCurrentSystemInfo();
- long dbId = invertedIndex.getDbId(tabletId);
- long tableId = invertedIndex.getTableId(tabletId);
- long partitionId = invertedIndex.getPartitionId(tabletId);
- long indexId = invertedIndex.getIndexId(tabletId);
+ TabletMeta tabletMeta = invertedIndex.getTabletMeta(tabletId);
+ long dbId = tabletMeta != null ? tabletMeta.getDbId() :
TabletInvertedIndex.NOT_EXIST_VALUE;
+ long tableId = tabletMeta != null ? tabletMeta.getTableId() :
TabletInvertedIndex.NOT_EXIST_VALUE;
+ long partitionId = tabletMeta != null ? tabletMeta.getPartitionId() :
TabletInvertedIndex.NOT_EXIST_VALUE;
+ long indexId = tabletMeta != null ? tabletMeta.getIndexId() :
TabletInvertedIndex.NOT_EXIST_VALUE;
int schemaHash = backendTabletInfo.getSchema_hash();
long version = backendTabletInfo.getVersion();
diff --git a/fe/src/main/java/org/apache/doris/qe/ShowExecutor.java
b/fe/src/main/java/org/apache/doris/qe/ShowExecutor.java
index 0807a85..81bf5c9 100644
--- a/fe/src/main/java/org/apache/doris/qe/ShowExecutor.java
+++ b/fe/src/main/java/org/apache/doris/qe/ShowExecutor.java
@@ -86,6 +86,7 @@ import org.apache.doris.catalog.ScalarType;
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.catalog.View;
import org.apache.doris.clone.DynamicPartitionScheduler;
import org.apache.doris.cluster.BaseParam;
@@ -1125,14 +1126,14 @@ public class ShowExecutor {
if (showStmt.isShowSingleTablet()) {
long tabletId = showStmt.getTabletId();
TabletInvertedIndex invertedIndex =
Catalog.getCurrentInvertedIndex();
-
- Long dbId = invertedIndex.getDbId(tabletId);
+ TabletMeta tabletMeta = invertedIndex.getTabletMeta(tabletId);
+ Long dbId = tabletMeta != null ? tabletMeta.getDbId() :
TabletInvertedIndex.NOT_EXIST_VALUE;
String dbName = null;
- Long tableId = invertedIndex.getTableId(tabletId);
+ Long tableId = tabletMeta != null ? tabletMeta.getTableId() :
TabletInvertedIndex.NOT_EXIST_VALUE;
String tableName = null;
- Long partitionId = invertedIndex.getPartitionId(tabletId);
+ Long partitionId = tabletMeta != null ?
tabletMeta.getPartitionId() : TabletInvertedIndex.NOT_EXIST_VALUE;
String partitionName = null;
- Long indexId = invertedIndex.getIndexId(tabletId);
+ Long indexId = tabletMeta != null ? tabletMeta.getIndexId() :
TabletInvertedIndex.NOT_EXIST_VALUE;
String indexName = null;
Boolean isSync = true;
diff --git
a/fe/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java
b/fe/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java
index d0b1eaa..1316ba3 100644
--- a/fe/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java
+++ b/fe/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java
@@ -27,6 +27,7 @@ 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.AnalysisException;
import org.apache.doris.common.Config;
import org.apache.doris.common.DuplicatedRequestException;
@@ -367,9 +368,16 @@ public class DatabaseTransactionMgr {
// if index is dropped, it does not matter.
// if table or partition is dropped during load, just ignore that
tablet,
// because we should allow dropping rollup or partition during load
- for (TabletCommitInfo tabletCommitInfo : tabletCommitInfos) {
- long tabletId = tabletCommitInfo.getTabletId();
- long tableId = tabletInvertedIndex.getTableId(tabletId);
+ List<Long> tabletIds = tabletCommitInfos.stream().map(
+ tabletCommitInfo ->
tabletCommitInfo.getTabletId()).collect(Collectors.toList());
+ List<TabletMeta> tabletMetaList =
tabletInvertedIndex.getTabletMetaList(tabletIds);
+ for (int i = 0; i < tabletMetaList.size(); i++) {
+ TabletMeta tabletMeta = tabletMetaList.get(i);
+ if (tabletMeta == TabletInvertedIndex.NOT_EXIST_TABLET_META) {
+ continue;
+ }
+ long tabletId = tabletIds.get(i);
+ long tableId = tabletMeta.getTableId();
OlapTable tbl = (OlapTable) db.getTable(tableId);
if (tbl == null) {
// this can happen when tableId == -1 (tablet being dropping)
@@ -382,7 +390,7 @@ public class DatabaseTransactionMgr {
+ "Can not load into it");
}
- long partitionId = tabletInvertedIndex.getPartitionId(tabletId);
+ long partitionId = tabletMeta.getPartitionId();
if (tbl.getPartition(partitionId) == null) {
// this can happen when partitionId == -1 (tablet being
dropping)
// or partition really not exist.
@@ -396,7 +404,7 @@ public class DatabaseTransactionMgr {
if (!tabletToBackends.containsKey(tabletId)) {
tabletToBackends.put(tabletId, new HashSet<>());
}
-
tabletToBackends.get(tabletId).add(tabletCommitInfo.getBackendId());
+
tabletToBackends.get(tabletId).add(tabletCommitInfos.get(i).getBackendId());
}
if (tableToPartition.isEmpty()) {
diff --git
a/fe/src/main/java/org/apache/doris/transaction/PublishVersionDaemon.java
b/fe/src/main/java/org/apache/doris/transaction/PublishVersionDaemon.java
index 70b0e52..2371fee 100644
--- a/fe/src/main/java/org/apache/doris/transaction/PublishVersionDaemon.java
+++ b/fe/src/main/java/org/apache/doris/transaction/PublishVersionDaemon.java
@@ -20,6 +20,7 @@ package org.apache.doris.transaction;
import org.apache.doris.catalog.Catalog;
import org.apache.doris.catalog.Replica;
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;
@@ -181,8 +182,14 @@ public class PublishVersionDaemon extends MasterDaemon {
// 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());
- for (long tabletId : tabletIds) {
- long partitionId =
tabletInvertedIndex.getPartitionId(tabletId);
+ 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) {
+ continue;
+ }
+ long partitionId = tabletMeta.getPartitionId();
if (errorPartitionIds.contains(partitionId)) {
Replica replica =
tabletInvertedIndex.getReplica(tabletId,
unfinishedTask.getBackendId());
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]