This is an automated email from the ASF dual-hosted git repository. morningman 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 90815447b02 [fix](mtmv)Solving the problem of calling each other in toString() loops (#34277) 90815447b02 is described below commit 90815447b02d14e6d6aa09e397bc5f10df493471 Author: zhangdong <493738...@qq.com> AuthorDate: Mon Apr 29 21:39:22 2024 +0800 [fix](mtmv)Solving the problem of calling each other in toString() loops (#34277) Change the name of the complex toString method to toInfoString() to avoid calling it incorrectly --- .../main/java/org/apache/doris/catalog/MTMV.java | 87 +++++++++++++++++----- .../apache/doris/job/extensions/mtmv/MTMVTask.java | 3 - .../java/org/apache/doris/mtmv/MTMVJobInfo.java | 4 +- .../doris/mtmv/MTMVMaxTimestampSnapshot.java | 8 ++ .../org/apache/doris/mtmv/MTMVPartitionInfo.java | 4 +- .../doris/mtmv/MTMVRefreshPartitionSnapshot.java | 8 ++ .../org/apache/doris/mtmv/MTMVRefreshSnapshot.java | 7 ++ .../java/org/apache/doris/mtmv/MTMVRelation.java | 4 +- .../apache/doris/mtmv/MTMVTimestampSnapshot.java | 7 ++ .../org/apache/doris/mtmv/MTMVVersionSnapshot.java | 7 ++ .../doris/tablefunction/MetadataGenerator.java | 2 +- .../test/java/org/apache/doris/mtmv/MTMVTest.java | 86 +++++++++++++++++++++ 12 files changed, 199 insertions(+), 28 deletions(-) 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 a751cd4beec..c76f1a253f2 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 @@ -364,6 +364,51 @@ public class MTMV extends OlapTable { return res; } + // for test + public void setRefreshInfo(MTMVRefreshInfo refreshInfo) { + this.refreshInfo = refreshInfo; + } + + // for test + public void setQuerySql(String querySql) { + this.querySql = querySql; + } + + // for test + public void setStatus(MTMVStatus status) { + this.status = status; + } + + // for test + public void setEnvInfo(EnvInfo envInfo) { + this.envInfo = envInfo; + } + + // for test + public void setJobInfo(MTMVJobInfo jobInfo) { + this.jobInfo = jobInfo; + } + + // for test + public void setMvProperties(Map<String, String> mvProperties) { + this.mvProperties = mvProperties; + } + + // for test + public void setRelation(MTMVRelation relation) { + this.relation = relation; + } + + // for test + public void setMvPartitionInfo(MTMVPartitionInfo mvPartitionInfo) { + this.mvPartitionInfo = mvPartitionInfo; + } + + // for test + public void setRefreshSnapshot(MTMVRefreshSnapshot refreshSnapshot) { + this.refreshSnapshot = refreshSnapshot; + } + public void readMvLock() { this.mvRwLock.readLock().lock(); } @@ -405,23 +450,29 @@ public class MTMV extends OlapTable { } } - @Override - public String toString() { - return "MTMV{" - + ", refreshInfo=" + refreshInfo - + ", querySql='" + querySql + '\'' - + ", status=" + status - + ", envInfo=" + envInfo - + ", jobInfo=" + jobInfo - + ", mvProperties=" + mvProperties - + ", relation=" + relation - + ", mvPartitionInfo=" + mvPartitionInfo - + ", refreshSnapshot=" + refreshSnapshot - + ", cache=" + cache - + ", id=" + id - + ", name='" + name + '\'' - + ", qualifiedDbName='" + qualifiedDbName + '\'' - + ", comment='" + comment + '\'' - + '}'; + // toString() is not easy to find where to call the method + public String toInfoString() { + final StringBuilder sb = new StringBuilder("MTMV{"); + sb.append("refreshInfo=").append(refreshInfo); + sb.append(", querySql='").append(querySql).append('\''); + sb.append(", status=").append(status); + sb.append(", envInfo=").append(envInfo); + if (jobInfo != null) { + sb.append(", jobInfo=").append(jobInfo.toInfoString()); + } + sb.append(", mvProperties=").append(mvProperties); + if (relation != null) { + sb.append(", relation=").append(relation.toInfoString()); + } + if (mvPartitionInfo != null) { + sb.append(", mvPartitionInfo=").append(mvPartitionInfo.toInfoString()); + } + sb.append(", refreshSnapshot=").append(refreshSnapshot); + sb.append(", id=").append(id); + sb.append(", name='").append(name).append('\''); + sb.append(", qualifiedDbName='").append(qualifiedDbName).append('\''); + sb.append(", comment='").append(comment).append('\''); + sb.append('}'); + return sb.toString(); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java b/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java index 42560575b14..f67144cd0d3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java +++ b/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java @@ -441,9 +441,6 @@ public class MTMVTask extends AbstractTask { + ", needRefreshPartitions=" + needRefreshPartitions + ", completedPartitions=" + completedPartitions + ", refreshMode=" + refreshMode - + ", mtmv=" + mtmv - + ", relation=" + relation - + ", executor=" + executor + "} " + super.toString(); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVJobInfo.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVJobInfo.java index b9a65e4d543..eb79c30adf5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVJobInfo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVJobInfo.java @@ -56,8 +56,8 @@ public class MTMVJobInfo { return historyTasks; } - @Override - public String toString() { + // toString() is not easy to find where to call the method + public String toInfoString() { return "MTMVJobInfo{" + "jobName='" + jobName + '\'' + ", historyTasks=" + historyTasks diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVMaxTimestampSnapshot.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVMaxTimestampSnapshot.java index 5b551cebef6..53f9df542cf 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVMaxTimestampSnapshot.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVMaxTimestampSnapshot.java @@ -56,4 +56,12 @@ public class MTMVMaxTimestampSnapshot implements MTMVSnapshotIf { public int hashCode() { return Objects.hashCode(partitionId, timestamp); } + + @Override + public String toString() { + return "MTMVMaxTimestampSnapshot{" + + "partitionId=" + partitionId + + ", timestamp=" + timestamp + + '}'; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionInfo.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionInfo.java index 3a364e0749d..348f6e4de99 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionInfo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionInfo.java @@ -102,8 +102,8 @@ public class MTMVPartitionInfo { return MTMVPartitionUtil.getPos(getRelatedTable(), relatedCol); } - @Override - public String toString() { + // toString() is not easy to find where to call the method + public String toInfoString() { return "MTMVPartitionInfo{" + "partitionType=" + partitionType + ", relatedTable=" + relatedTable diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRefreshPartitionSnapshot.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRefreshPartitionSnapshot.java index 8de2b4cdfed..2336c3922ea 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRefreshPartitionSnapshot.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRefreshPartitionSnapshot.java @@ -40,4 +40,12 @@ public class MTMVRefreshPartitionSnapshot { public Map<Long, MTMVSnapshotIf> getTables() { return tables; } + + @Override + public String toString() { + return "MTMVRefreshPartitionSnapshot{" + + "partitions=" + partitions + + ", tables=" + tables + + '}'; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRefreshSnapshot.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRefreshSnapshot.java index 5132f06a12e..c1d07b27049 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRefreshSnapshot.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRefreshSnapshot.java @@ -72,4 +72,11 @@ public class MTMVRefreshSnapshot { } } } + + @Override + public String toString() { + return "MTMVRefreshSnapshot{" + + "partitionSnapshots=" + partitionSnapshots + + '}'; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRelation.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRelation.java index d8f4d5be627..b9f5350086a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRelation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRelation.java @@ -44,8 +44,8 @@ public class MTMVRelation { return baseViews; } - @Override - public String toString() { + // toString() is not easy to find where to call the method + public String toInfoString() { return "MTMVRelation{" + "baseTables=" + baseTables + ", baseViews=" + baseViews diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVTimestampSnapshot.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVTimestampSnapshot.java index b3fd88a94de..359f83abf89 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVTimestampSnapshot.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVTimestampSnapshot.java @@ -48,4 +48,11 @@ public class MTMVTimestampSnapshot implements MTMVSnapshotIf { public int hashCode() { return Objects.hashCode(timestamp); } + + @Override + public String toString() { + return "MTMVTimestampSnapshot{" + + "timestamp=" + timestamp + + '}'; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVVersionSnapshot.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVVersionSnapshot.java index 14304e60183..0eb7860bc54 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVVersionSnapshot.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVVersionSnapshot.java @@ -44,4 +44,11 @@ public class MTMVVersionSnapshot implements MTMVSnapshotIf { public int hashCode() { return Objects.hashCode(version); } + + @Override + public String toString() { + return "MTMVVersionSnapshot{" + + "version=" + version + + '}'; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java index 85d9ce94cdd..50d97e69705 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java @@ -727,7 +727,7 @@ public class MetadataGenerator { } MTMV mv = (MTMV) table; if (LOG.isDebugEnabled()) { - LOG.debug("mv: " + mv); + LOG.debug("mv: " + mv.toInfoString()); } TRow trow = new TRow(); trow.addToColumnValue(new TCell().setLongVal(mv.getId())); diff --git a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVTest.java b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVTest.java new file mode 100644 index 00000000000..695203b9cec --- /dev/null +++ b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVTest.java @@ -0,0 +1,86 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.mtmv; + +import org.apache.doris.catalog.MTMV; +import org.apache.doris.job.common.IntervalUnit; +import org.apache.doris.job.extensions.mtmv.MTMVTask; +import org.apache.doris.mtmv.MTMVRefreshEnum.BuildMode; +import org.apache.doris.mtmv.MTMVRefreshEnum.RefreshMethod; +import org.apache.doris.mtmv.MTMVRefreshEnum.RefreshTrigger; + +import com.google.common.collect.Sets; +import org.junit.Assert; +import org.junit.Test; + +import java.util.HashMap; + +public class MTMVTest { + @Test + public void testToInfoString() { + String expect + = "MTMV{refreshInfo=BUILD IMMEDIATE REFRESH COMPLETE ON SCHEDULE EVERY 2 SECOND STARTS ss, " + + "querySql='select * from xxx;', " + + "status=MTMVStatus{state=INIT, schemaChangeDetail='null', refreshState=INIT}, " + + "envInfo=EnvInfo{ctlId='1', dbId='2'}, " + + "jobInfo=MTMVJobInfo{jobName='job1', " + + "historyTasks=[MTMVTask{dbId=0, mtmvId=0, taskContext=null, " + + "needRefreshPartitions=null, completedPartitions=null, refreshMode=null} " + + "AbstractTask(jobId=null, taskId=1, status=null, createTimeMs=null, startTimeMs=null, " + + "finishTimeMs=null, taskType=null, errMsg=null)]}, mvProperties={}, " + + "relation=MTMVRelation{baseTables=[], baseViews=[]}, " + + "mvPartitionInfo=MTMVPartitionInfo{partitionType=null, relatedTable=null, " + + "relatedCol='null', partitionCol='null'}, " + + "refreshSnapshot=MTMVRefreshSnapshot{partitionSnapshots={}}, id=1, name='null', " + + "qualifiedDbName='db1', comment='comment1'}"; + MTMV mtmv = new MTMV(); + mtmv.setId(1L); + mtmv.setComment("comment1"); + mtmv.setQualifiedDbName("db1"); + mtmv.setRefreshInfo(buildMTMVRefreshInfo(mtmv)); + mtmv.setQuerySql("select * from xxx;"); + mtmv.setStatus(new MTMVStatus()); + mtmv.setEnvInfo(new EnvInfo(1L, 2L)); + mtmv.setJobInfo(buildMTMVJobInfo(mtmv)); + mtmv.setMvProperties(new HashMap<>()); + mtmv.setRelation(new MTMVRelation(Sets.newHashSet(), Sets.newHashSet())); + mtmv.setMvPartitionInfo(new MTMVPartitionInfo()); + mtmv.setRefreshSnapshot(new MTMVRefreshSnapshot()); + Assert.assertEquals(expect, mtmv.toInfoString()); + } + + private MTMVRefreshInfo buildMTMVRefreshInfo(MTMV mtmv) { + MTMVRefreshTriggerInfo info = new MTMVRefreshTriggerInfo(RefreshTrigger.SCHEDULE, + new MTMVRefreshSchedule("ss", 2, + IntervalUnit.SECOND)); + MTMVRefreshInfo mtmvRefreshInfo = new MTMVRefreshInfo(BuildMode.IMMEDIATE, RefreshMethod.COMPLETE, info); + return mtmvRefreshInfo; + } + + private MTMVJobInfo buildMTMVJobInfo(MTMV mtmv) { + MTMVJobInfo mtmvJobInfo = new MTMVJobInfo("job1"); + mtmvJobInfo.addHistoryTask(buildMTMVTask(mtmv)); + return mtmvJobInfo; + } + + private MTMVTask buildMTMVTask(MTMV mtmv) { + MTMVTask task = new MTMVTask(mtmv, null, null); + task.setTaskId(1L); + return task; + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org