This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push: new 4f45fefea28 [enhance](mtmv)Optimize MTMV lock logic (#44967) (#45076) 4f45fefea28 is described below commit 4f45fefea28b4591e57eef5ae1d31cecde66b6cc Author: zhangdong <zhangd...@selectdb.com> AuthorDate: Fri Dec 6 17:17:32 2024 +0800 [enhance](mtmv)Optimize MTMV lock logic (#44967) (#45076) pick: https://github.com/apache/doris/pull/44967 --- .../main/java/org/apache/doris/catalog/Env.java | 46 +++++++++++++--------- .../main/java/org/apache/doris/catalog/MTMV.java | 2 +- .../java/org/apache/doris/catalog/OlapTable.java | 20 ++++++---- .../org/apache/doris/mtmv/MTMVPartitionUtil.java | 16 +++----- .../plans/commands/info/ShowCreateMTMVInfo.java | 13 ++---- .../java/org/apache/doris/qe/ShowExecutor.java | 12 ++---- 6 files changed, 52 insertions(+), 57 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java index a0624c407ae..cf0885e6ec2 100755 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java @@ -3217,25 +3217,33 @@ public class Env { hidePassword, false, specificVersion, false, true); } - public static String getMTMVDdl(MTMV mtmv) { - StringBuilder sb = new StringBuilder("CREATE MATERIALIZED VIEW "); - sb.append(mtmv.getName()); - addMTMVCols(mtmv, sb); - sb.append("\n"); - sb.append(mtmv.getRefreshInfo()); - addMTMVKeyInfo(mtmv, sb); - addTableComment(mtmv, sb); - addMTMVPartitionInfo(mtmv, sb); - DistributionInfo distributionInfo = mtmv.getDefaultDistributionInfo(); - sb.append("\n").append(distributionInfo.toSql()); - // properties - sb.append("\nPROPERTIES (\n"); - addOlapTablePropertyInfo(mtmv, sb, false, false, null); - addMTMVPropertyInfo(mtmv, sb); - sb.append("\n)"); - sb.append("\nAS "); - sb.append(mtmv.getQuerySql()); - return sb.toString(); + public static String getMTMVDdl(MTMV mtmv) throws AnalysisException { + if (!mtmv.tryReadLock(1, TimeUnit.MINUTES)) { + throw new AnalysisException( + "get table read lock timeout, database=" + mtmv.getQualifiedDbName() + ",table=" + mtmv.getName()); + } + try { + StringBuilder sb = new StringBuilder("CREATE MATERIALIZED VIEW "); + sb.append(mtmv.getName()); + addMTMVCols(mtmv, sb); + sb.append("\n"); + sb.append(mtmv.getRefreshInfo()); + addMTMVKeyInfo(mtmv, sb); + addTableComment(mtmv, sb); + addMTMVPartitionInfo(mtmv, sb); + DistributionInfo distributionInfo = mtmv.getDefaultDistributionInfo(); + sb.append("\n").append(distributionInfo.toSql()); + // properties + sb.append("\nPROPERTIES (\n"); + addOlapTablePropertyInfo(mtmv, sb, false, false, null); + addMTMVPropertyInfo(mtmv, sb); + sb.append("\n)"); + sb.append("\nAS "); + sb.append(mtmv.getQuerySql()); + return sb.toString(); + } finally { + mtmv.readUnlock(); + } } private static void addMTMVKeyInfo(MTMV mtmv, StringBuilder sb) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/MTMV.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/MTMV.java index 700a1364fdb..c1fcc85125e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/MTMV.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/MTMV.java @@ -385,7 +385,7 @@ public class MTMV extends OlapTable { Map<String, String> baseToMv = Maps.newHashMap(); Map<PartitionKeyDesc, Set<String>> relatedPartitionDescs = MTMVPartitionUtil .generateRelatedPartitionDescs(mvPartitionInfo, mvProperties); - Map<String, PartitionItem> mvPartitionItems = getAndCopyPartitionItems(); + Map<String, PartitionItem> mvPartitionItems = getAndCopyPartitionItemsWithoutLock(); for (Entry<String, PartitionItem> entry : mvPartitionItems.entrySet()) { Set<String> basePartitionNames = relatedPartitionDescs.getOrDefault(entry.getValue().toPartitionKeyDesc(), Sets.newHashSet()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java index 001f36841a7..21e43179436 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java @@ -3029,19 +3029,23 @@ public class OlapTable extends Table implements MTMVRelatedTableIf { "get table read lock timeout, database=" + getQualifiedDbName() + ",table=" + getName()); } try { - Map<String, PartitionItem> res = Maps.newHashMap(); - for (Entry<Long, PartitionItem> entry : getPartitionInfo().getIdToItem(false).entrySet()) { - Partition partition = idToPartition.get(entry.getKey()); - if (partition != null) { - res.put(partition.getName(), entry.getValue()); - } - } - return res; + return getAndCopyPartitionItemsWithoutLock(); } finally { readUnlock(); } } + public Map<String, PartitionItem> getAndCopyPartitionItemsWithoutLock() throws AnalysisException { + Map<String, PartitionItem> res = Maps.newHashMap(); + for (Entry<Long, PartitionItem> entry : getPartitionInfo().getIdToItem(false).entrySet()) { + Partition partition = idToPartition.get(entry.getKey()); + if (partition != null) { + res.put(partition.getName(), entry.getValue()); + } + } + return res; + } + @Override public List<Column> getPartitionColumns(Optional<MvccSnapshot> snapshot) { return getPartitionColumns(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java index 836a5f08bff..e2775970ab6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java @@ -172,18 +172,12 @@ public class MTMVPartitionUtil { } public static List<Long> getPartitionsIdsByNames(MTMV mtmv, List<String> partitions) throws AnalysisException { - mtmv.readLock(); - try { - List<Long> res = Lists.newArrayList(); - for (String partitionName : partitions) { - Partition partition = mtmv.getPartitionOrAnalysisException(partitionName); - res.add(partition.getId()); - } - return res; - } finally { - mtmv.readUnlock(); + List<Long> res = Lists.newArrayList(); + for (String partitionName : partitions) { + Partition partition = mtmv.getPartitionOrAnalysisException(partitionName); + res.add(partition.getId()); } - + return res; } /** diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ShowCreateMTMVInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ShowCreateMTMVInfo.java index 588af236574..b4fde11c3e1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ShowCreateMTMVInfo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ShowCreateMTMVInfo.java @@ -74,18 +74,13 @@ public class ShowCreateMTMVInfo { * @throws DdlException DdlException * @throws IOException IOException */ - public void run(StmtExecutor executor) throws DdlException, IOException { + public void run(StmtExecutor executor) throws DdlException, IOException, org.apache.doris.common.AnalysisException { List<List<String>> rows = Lists.newArrayList(); Database db = Env.getCurrentInternalCatalog().getDbOrDdlException(mvName.getDb()); MTMV mtmv = (MTMV) db.getTableOrDdlException(mvName.getTbl()); - mtmv.readLock(); - try { - String mtmvDdl = Env.getMTMVDdl(mtmv); - rows.add(Lists.newArrayList(mtmv.getName(), mtmvDdl)); - executor.handleShowCreateMTMVStmt(rows); - } finally { - mtmv.readUnlock(); - } + String mtmvDdl = Env.getMTMVDdl(mtmv); + rows.add(Lists.newArrayList(mtmv.getName(), mtmvDdl)); + executor.handleShowCreateMTMVStmt(rows); } /** diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java index 88762897fae..741f20dd88f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java @@ -1080,15 +1080,9 @@ public class ShowExecutor { .getDbOrAnalysisException(showStmt.getDb()); MTMV mtmv = (MTMV) db.getTableOrAnalysisException(showStmt.getTable()); List<List<String>> rows = Lists.newArrayList(); - - mtmv.readLock(); - try { - String mtmvDdl = Env.getMTMVDdl(mtmv); - rows.add(Lists.newArrayList(mtmv.getName(), mtmvDdl)); - resultSet = new ShowResultSet(showStmt.getMetaData(), rows); - } finally { - mtmv.readUnlock(); - } + String mtmvDdl = Env.getMTMVDdl(mtmv); + rows.add(Lists.newArrayList(mtmv.getName(), mtmvDdl)); + resultSet = new ShowResultSet(showStmt.getMetaData(), rows); } // Describe statement --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org