Skip to content
Merged

Fix ut. #33147

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,8 @@ protected void send() {
protected Set<TQueryColumn> getNeedAnalyzeColumns(Queue<QueryColumn> columnQueue) {
Set<TQueryColumn> ret = Sets.newHashSet();
TableIf table;
for (int i = 0; i < columnQueue.size(); i++) {
int size = columnQueue.size();
for (int i = 0; i < size; i++) {
QueryColumn column = columnQueue.poll();
if (column == null) {
continue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,8 +234,4 @@ protected void executeSystemAnalysisJob(AnalysisInfo jobInfo)
future.get();
}
}

protected AnalysisInfo getNeedAnalyzeColumns(AnalysisInfo jobInfo) {
return jobInfo;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,9 @@ protected void appendToLowJobs(Map<TableName, Set<Pair<String, String>>> jobs) {
if (!(t instanceof OlapTable) || t.getId() <= currentTableId) {
continue;
}
if (t.getBaseSchema().size() > StatisticsUtil.getAutoAnalyzeTableWidthThreshold()) {
continue;
}
Set<Pair<String, String>> columnIndexPairs = t.getColumnIndexPairs(
t.getSchemaAllIndexes(false).stream()
.filter(c -> !StatisticsUtil.isUnsupportedType(c.getType()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ public void update(AnalysisInfo analyzedJob, TableIf tableIf) {
if (tableIf instanceof OlapTable) {
rowCount = analyzedJob.rowCount;
}
if (rowCount == 0 && analyzedJob.analysisMethod.equals(AnalysisMethod.SAMPLE)) {
if (rowCount == 0 && AnalysisMethod.SAMPLE.equals(analyzedJob.analysisMethod)) {
return;
}
if (analyzedJob.jobColumns.containsAll(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public void testAppendBufTest2(@Mocked AnalysisInfo analysisInfo, @Mocked OlapAn

new MockUp<AnalysisJob>() {
@Mock
protected void writeBuf() {
protected void flushBuffer() {
writeBufInvokeTimes.incrementAndGet();
}

Expand Down Expand Up @@ -111,7 +111,7 @@ public void testAppendBufTest3(@Mocked AnalysisInfo analysisInfo, @Mocked OlapAn

new MockUp<AnalysisJob>() {
@Mock
protected void writeBuf() {
protected void flushBuffer() {
writeBufInvokeTimes.incrementAndGet();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import org.apache.doris.analysis.AnalyzeTblStmt;
import org.apache.doris.analysis.PartitionNames;
import org.apache.doris.analysis.ShowAnalyzeStmt;
import org.apache.doris.analysis.ShowAutoAnalyzeJobsStmt;
import org.apache.doris.analysis.StatementBase;
import org.apache.doris.analysis.TableName;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Database;
Expand Down Expand Up @@ -497,143 +499,143 @@ public void testMergeFollowerColumn() throws DdlException {
Assertions.assertEquals(0, analysisManager.midPriorityColumns.size());
}

// @Test
// public void testShowAutoJobs() {
// AnalysisManager manager = new AnalysisManager();
// TableName high1 = new TableName("catalog1", "db1", "high1");
// TableName high2 = new TableName("catalog2", "db2", "high2");
// TableName mid1 = new TableName("catalog3", "db3", "mid1");
// TableName mid2 = new TableName("catalog4", "db4", "mid2");
// TableName low1 = new TableName("catalog5", "db5", "low1");
//
// manager.highPriorityJobs.put(high1, new HashSet<String>());
// manager.highPriorityJobs.get(high1).add("col1");
// manager.highPriorityJobs.get(high1).add("col2");
// manager.highPriorityJobs.put(high2, new HashSet<String>());
// manager.highPriorityJobs.get(high2).add("col3");
// manager.midPriorityJobs.put(mid1, new HashSet<String>());
// manager.midPriorityJobs.get(mid1).add("col4");
// manager.midPriorityJobs.put(mid2, new HashSet<String>());
// manager.midPriorityJobs.get(mid2).add("col5");
// manager.lowPriorityJobs.put(low1, new HashSet<String>());
// manager.lowPriorityJobs.get(low1).add("col6");
// manager.lowPriorityJobs.get(low1).add("col7");
//
// new MockUp<StatementBase>() {
// @Mock
// public boolean isAnalyzed() {
// return true;
// }
// };
// ShowAutoAnalyzeJobsStmt stmt = new ShowAutoAnalyzeJobsStmt(null, null);
// List<AutoAnalysisPendingJob> autoAnalysisPendingJobs = manager.showAutoPendingJobs(stmt);
// Assertions.assertEquals(5, autoAnalysisPendingJobs.size());
// AutoAnalysisPendingJob job = autoAnalysisPendingJobs.get(0);
// Assertions.assertEquals("catalog1", job.catalogName);
// Assertions.assertEquals("db1", job.dbName);
// Assertions.assertEquals("high1", job.tableName);
// Assertions.assertEquals(2, job.columnNames.size());
// Assertions.assertTrue(job.columnNames.contains("col1"));
// Assertions.assertTrue(job.columnNames.contains("col2"));
// Assertions.assertEquals(JobPriority.HIGH, job.priority);
//
// job = autoAnalysisPendingJobs.get(1);
// Assertions.assertEquals("catalog2", job.catalogName);
// Assertions.assertEquals("db2", job.dbName);
// Assertions.assertEquals("high2", job.tableName);
// Assertions.assertEquals(1, job.columnNames.size());
// Assertions.assertTrue(job.columnNames.contains("col3"));
// Assertions.assertEquals(JobPriority.HIGH, job.priority);
//
// job = autoAnalysisPendingJobs.get(2);
// Assertions.assertEquals("catalog3", job.catalogName);
// Assertions.assertEquals("db3", job.dbName);
// Assertions.assertEquals("mid1", job.tableName);
// Assertions.assertEquals(1, job.columnNames.size());
// Assertions.assertTrue(job.columnNames.contains("col4"));
// Assertions.assertEquals(JobPriority.MID, job.priority);
//
// job = autoAnalysisPendingJobs.get(3);
// Assertions.assertEquals("catalog4", job.catalogName);
// Assertions.assertEquals("db4", job.dbName);
// Assertions.assertEquals("mid2", job.tableName);
// Assertions.assertEquals(1, job.columnNames.size());
// Assertions.assertTrue(job.columnNames.contains("col5"));
// Assertions.assertEquals(JobPriority.MID, job.priority);
//
// job = autoAnalysisPendingJobs.get(4);
// Assertions.assertEquals("catalog5", job.catalogName);
// Assertions.assertEquals("db5", job.dbName);
// Assertions.assertEquals("low1", job.tableName);
// Assertions.assertEquals(2, job.columnNames.size());
// Assertions.assertTrue(job.columnNames.contains("col6"));
// Assertions.assertTrue(job.columnNames.contains("col7"));
// Assertions.assertEquals(JobPriority.LOW, job.priority);
//
// new MockUp<ShowAutoAnalyzeJobsStmt>() {
// @Mock
// public String getPriority() {
// return JobPriority.HIGH.name().toUpperCase();
// }
// };
// List<AutoAnalysisPendingJob> highJobs = manager.showAutoPendingJobs(stmt);
// Assertions.assertEquals(2, highJobs.size());
// job = highJobs.get(0);
// Assertions.assertEquals("catalog1", job.catalogName);
// Assertions.assertEquals("db1", job.dbName);
// Assertions.assertEquals("high1", job.tableName);
// Assertions.assertEquals(2, job.columnNames.size());
// Assertions.assertTrue(job.columnNames.contains("col1"));
// Assertions.assertTrue(job.columnNames.contains("col2"));
// Assertions.assertEquals(JobPriority.HIGH, job.priority);
//
// job = highJobs.get(1);
// Assertions.assertEquals("catalog2", job.catalogName);
// Assertions.assertEquals("db2", job.dbName);
// Assertions.assertEquals("high2", job.tableName);
// Assertions.assertEquals(1, job.columnNames.size());
// Assertions.assertTrue(job.columnNames.contains("col3"));
// Assertions.assertEquals(JobPriority.HIGH, job.priority);
//
// new MockUp<ShowAutoAnalyzeJobsStmt>() {
// @Mock
// public String getPriority() {
// return JobPriority.MID.name().toUpperCase();
// }
// };
// List<AutoAnalysisPendingJob> midJobs = manager.showAutoPendingJobs(stmt);
// Assertions.assertEquals(2, midJobs.size());
// job = midJobs.get(0);
// Assertions.assertEquals("catalog3", job.catalogName);
// Assertions.assertEquals("db3", job.dbName);
// Assertions.assertEquals("mid1", job.tableName);
// Assertions.assertEquals(1, job.columnNames.size());
// Assertions.assertTrue(job.columnNames.contains("col4"));
// Assertions.assertEquals(JobPriority.MID, job.priority);
//
// job = midJobs.get(1);
// Assertions.assertEquals("catalog4", job.catalogName);
// Assertions.assertEquals("db4", job.dbName);
// Assertions.assertEquals("mid2", job.tableName);
// Assertions.assertEquals(1, job.columnNames.size());
// Assertions.assertTrue(job.columnNames.contains("col5"));
// Assertions.assertEquals(JobPriority.MID, job.priority);
//
// new MockUp<ShowAutoAnalyzeJobsStmt>() {
// @Mock
// public String getPriority() {
// return JobPriority.LOW.name().toUpperCase();
// }
// };
// List<AutoAnalysisPendingJob> lowJobs = manager.showAutoPendingJobs(stmt);
// Assertions.assertEquals(1, lowJobs.size());
// job = lowJobs.get(0);
// Assertions.assertEquals("catalog5", job.catalogName);
// Assertions.assertEquals("db5", job.dbName);
// Assertions.assertEquals("low1", job.tableName);
// Assertions.assertEquals(2, job.columnNames.size());
// Assertions.assertTrue(job.columnNames.contains("col6"));
// Assertions.assertTrue(job.columnNames.contains("col7"));
// Assertions.assertEquals(JobPriority.LOW, job.priority);
// }
@Test
public void testShowAutoJobs() {
AnalysisManager manager = new AnalysisManager();
TableName high1 = new TableName("catalog1", "db1", "high1");
TableName high2 = new TableName("catalog2", "db2", "high2");
TableName mid1 = new TableName("catalog3", "db3", "mid1");
TableName mid2 = new TableName("catalog4", "db4", "mid2");
TableName low1 = new TableName("catalog5", "db5", "low1");

manager.highPriorityJobs.put(high1, new HashSet<>());
manager.highPriorityJobs.get(high1).add(Pair.of("index1", "col1"));
manager.highPriorityJobs.get(high1).add(Pair.of("index2", "col2"));
manager.highPriorityJobs.put(high2, new HashSet<>());
manager.highPriorityJobs.get(high2).add(Pair.of("index1", "col3"));
manager.midPriorityJobs.put(mid1, new HashSet<>());
manager.midPriorityJobs.get(mid1).add(Pair.of("index1", "col4"));
manager.midPriorityJobs.put(mid2, new HashSet<>());
manager.midPriorityJobs.get(mid2).add(Pair.of("index1", "col5"));
manager.lowPriorityJobs.put(low1, new HashSet<>());
manager.lowPriorityJobs.get(low1).add(Pair.of("index1", "col6"));
manager.lowPriorityJobs.get(low1).add(Pair.of("index1", "col7"));

new MockUp<StatementBase>() {
@Mock
public boolean isAnalyzed() {
return true;
}
};
ShowAutoAnalyzeJobsStmt stmt = new ShowAutoAnalyzeJobsStmt(null, null);
List<AutoAnalysisPendingJob> autoAnalysisPendingJobs = manager.showAutoPendingJobs(stmt);
Assertions.assertEquals(5, autoAnalysisPendingJobs.size());
AutoAnalysisPendingJob job = autoAnalysisPendingJobs.get(0);
Assertions.assertEquals("catalog1", job.catalogName);
Assertions.assertEquals("db1", job.dbName);
Assertions.assertEquals("high1", job.tableName);
Assertions.assertEquals(2, job.columns.size());
Assertions.assertTrue(job.columns.contains(Pair.of("index1", "col1")));
Assertions.assertTrue(job.columns.contains(Pair.of("index2", "col2")));
Assertions.assertEquals(JobPriority.HIGH, job.priority);

job = autoAnalysisPendingJobs.get(1);
Assertions.assertEquals("catalog2", job.catalogName);
Assertions.assertEquals("db2", job.dbName);
Assertions.assertEquals("high2", job.tableName);
Assertions.assertEquals(1, job.columns.size());
Assertions.assertTrue(job.columns.contains(Pair.of("index1", "col3")));
Assertions.assertEquals(JobPriority.HIGH, job.priority);

job = autoAnalysisPendingJobs.get(2);
Assertions.assertEquals("catalog3", job.catalogName);
Assertions.assertEquals("db3", job.dbName);
Assertions.assertEquals("mid1", job.tableName);
Assertions.assertEquals(1, job.columns.size());
Assertions.assertTrue(job.columns.contains(Pair.of("index1", "col4")));
Assertions.assertEquals(JobPriority.MID, job.priority);

job = autoAnalysisPendingJobs.get(3);
Assertions.assertEquals("catalog4", job.catalogName);
Assertions.assertEquals("db4", job.dbName);
Assertions.assertEquals("mid2", job.tableName);
Assertions.assertEquals(1, job.columns.size());
Assertions.assertTrue(job.columns.contains(Pair.of("index1", "col5")));
Assertions.assertEquals(JobPriority.MID, job.priority);

job = autoAnalysisPendingJobs.get(4);
Assertions.assertEquals("catalog5", job.catalogName);
Assertions.assertEquals("db5", job.dbName);
Assertions.assertEquals("low1", job.tableName);
Assertions.assertEquals(2, job.columns.size());
Assertions.assertTrue(job.columns.contains(Pair.of("index1", "col6")));
Assertions.assertTrue(job.columns.contains(Pair.of("index1", "col7")));
Assertions.assertEquals(JobPriority.LOW, job.priority);

new MockUp<ShowAutoAnalyzeJobsStmt>() {
@Mock
public String getPriority() {
return JobPriority.HIGH.name().toUpperCase();
}
};
List<AutoAnalysisPendingJob> highJobs = manager.showAutoPendingJobs(stmt);
Assertions.assertEquals(2, highJobs.size());
job = highJobs.get(0);
Assertions.assertEquals("catalog1", job.catalogName);
Assertions.assertEquals("db1", job.dbName);
Assertions.assertEquals("high1", job.tableName);
Assertions.assertEquals(2, job.columns.size());
Assertions.assertTrue(job.columns.contains(Pair.of("index1", "col1")));
Assertions.assertTrue(job.columns.contains(Pair.of("index2", "col2")));
Assertions.assertEquals(JobPriority.HIGH, job.priority);

job = highJobs.get(1);
Assertions.assertEquals("catalog2", job.catalogName);
Assertions.assertEquals("db2", job.dbName);
Assertions.assertEquals("high2", job.tableName);
Assertions.assertEquals(1, job.columns.size());
Assertions.assertTrue(job.columns.contains(Pair.of("index1", "col3")));
Assertions.assertEquals(JobPriority.HIGH, job.priority);

new MockUp<ShowAutoAnalyzeJobsStmt>() {
@Mock
public String getPriority() {
return JobPriority.MID.name().toUpperCase();
}
};
List<AutoAnalysisPendingJob> midJobs = manager.showAutoPendingJobs(stmt);
Assertions.assertEquals(2, midJobs.size());
job = midJobs.get(0);
Assertions.assertEquals("catalog3", job.catalogName);
Assertions.assertEquals("db3", job.dbName);
Assertions.assertEquals("mid1", job.tableName);
Assertions.assertEquals(1, job.columns.size());
Assertions.assertTrue(job.columns.contains(Pair.of("index1", "col4")));
Assertions.assertEquals(JobPriority.MID, job.priority);

job = midJobs.get(1);
Assertions.assertEquals("catalog4", job.catalogName);
Assertions.assertEquals("db4", job.dbName);
Assertions.assertEquals("mid2", job.tableName);
Assertions.assertEquals(1, job.columns.size());
Assertions.assertTrue(job.columns.contains(Pair.of("index1", "col5")));
Assertions.assertEquals(JobPriority.MID, job.priority);

new MockUp<ShowAutoAnalyzeJobsStmt>() {
@Mock
public String getPriority() {
return JobPriority.LOW.name().toUpperCase();
}
};
List<AutoAnalysisPendingJob> lowJobs = manager.showAutoPendingJobs(stmt);
Assertions.assertEquals(1, lowJobs.size());
job = lowJobs.get(0);
Assertions.assertEquals("catalog5", job.catalogName);
Assertions.assertEquals("db5", job.dbName);
Assertions.assertEquals("low1", job.tableName);
Assertions.assertEquals(2, job.columns.size());
Assertions.assertTrue(job.columns.contains(Pair.of("index1", "col6")));
Assertions.assertTrue(job.columns.contains(Pair.of("index1", "col7")));
Assertions.assertEquals(JobPriority.LOW, job.priority);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@

package org.apache.doris.statistics;

import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.OlapTable;
import org.apache.doris.catalog.PrimitiveType;
import org.apache.doris.catalog.TableIf;
import org.apache.doris.common.Pair;
import org.apache.doris.statistics.util.StatisticsUtil;
import org.apache.doris.thrift.TQueryColumn;

Expand All @@ -26,20 +31,38 @@
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.util.Collections;
import java.util.Queue;
import java.util.Set;

public class FollowerColumnSenderTest {

@Test
public void testGetNeedAnalyzeColumns() {
new MockUp<OlapTable>() {
@Mock
public Column getColumn(String name) {
return new Column("col", PrimitiveType.INT);
}

@Mock
public Set<Pair<String, String>> getColumnIndexPairs(Set<String> columns) {
return Collections.singleton(Pair.of("mockIndex", "mockCol"));
}
};

new MockUp<StatisticsUtil>() {
boolean[] result = {false, true, false, true, true};
int i = 0;
@Mock
public boolean needAnalyzeColumn(QueryColumn column) {
public boolean needAnalyzeColumn(TableIf table, Pair<String, String> column) {
return result[i++];
}

@Mock
public TableIf findTable(long catalogId, long dbId, long tblId) {
return new OlapTable();
}
};
QueryColumn column1 = new QueryColumn(1, 2, 3, "col1");
QueryColumn column2 = new QueryColumn(1, 2, 3, "col2");
Expand Down
Loading