This is an automated email from the ASF dual-hosted git repository.
lijibing 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 b84e1289740 [fix](statistics)Fix clear stale mv row count bug.
(#41653) (#41807)
b84e1289740 is described below
commit b84e128974059ca963833f4aceee35eaaf0050e3
Author: Jibing-Li <[email protected]>
AuthorDate: Mon Oct 14 21:14:05 2024 +0800
[fix](statistics)Fix clear stale mv row count bug. (#41653) (#41807)
backport: https://github.com/apache/doris/pull/41653
---
.../java/org/apache/doris/catalog/OlapTable.java | 8 ++++++
.../apache/doris/statistics/TableStatsMeta.java | 19 ++++++-------
.../doris/statistics/TableStatsMetaTest.java | 33 ++++++++++++++++++++++
.../suites/statistics/test_analyze_mv.groovy | 24 ++++++++++++++++
4 files changed, 73 insertions(+), 11 deletions(-)
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 2f6f6b9e98b..f30fcaadf3f 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
@@ -770,6 +770,14 @@ public class OlapTable extends Table implements
MTMVRelatedTableIf {
return result;
}
+ public List<Long> getIndexIdList() {
+ List<Long> result = Lists.newArrayList();
+ for (Long indexId : indexIdToMeta.keySet()) {
+ result.add(indexId);
+ }
+ return result;
+ }
+
// schema
public Map<Long, List<Column>> getIndexIdToSchema() {
return getIndexIdToSchema(Util.showHiddenColumns());
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/statistics/TableStatsMeta.java
b/fe/fe-core/src/main/java/org/apache/doris/statistics/TableStatsMeta.java
index ca918c950bb..355ae23088c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/TableStatsMeta.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/TableStatsMeta.java
@@ -150,10 +150,6 @@ public class TableStatsMeta implements Writable,
GsonPostProcessable {
colToColStatsMeta.remove(Pair.of(indexName, colName));
}
- public void removeAllColumn() {
- colToColStatsMeta.clear();
- }
-
public Set<Pair<String, String>> analyzeColumns() {
return colToColStatsMeta.keySet();
}
@@ -218,18 +214,19 @@ public class TableStatsMeta implements Writable,
GsonPostProcessable {
return indexesRowCount.getOrDefault(indexId, -1L);
}
- public void clearIndexesRowCount() {
- indexesRowCount.clear();
- }
-
- private void clearStaleIndexRowCount(OlapTable table) {
+ protected void clearStaleIndexRowCount(OlapTable table) {
Iterator<Long> iterator = indexesRowCount.keySet().iterator();
- List<Long> indexIds = table.getIndexIds();
+ List<Long> indexIds = table.getIndexIdList();
while (iterator.hasNext()) {
long key = iterator.next();
- if (indexIds.contains(key)) {
+ if (!indexIds.contains(key)) {
iterator.remove();
}
}
}
+
+ // For unit test only.
+ protected void addIndexRowForTest(long indexId, long rowCount) {
+ indexesRowCount.put(indexId, rowCount);
+ }
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/statistics/TableStatsMetaTest.java
b/fe/fe-core/src/test/java/org/apache/doris/statistics/TableStatsMetaTest.java
index 349f415a3c4..725a687e8d8 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/statistics/TableStatsMetaTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/statistics/TableStatsMetaTest.java
@@ -19,11 +19,15 @@ package org.apache.doris.statistics;
import org.apache.doris.catalog.OlapTable;
+import com.google.common.collect.Lists;
+import mockit.Mock;
+import mockit.MockUp;
import mockit.Mocked;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
+import java.util.List;
class TableStatsMetaTest {
@@ -35,4 +39,33 @@ class TableStatsMetaTest {
tableStatsMeta.update(jobInfo, table);
Assertions.assertEquals(4, tableStatsMeta.rowCount);
}
+
+ @Test
+ void testClearStaleIndexRowCount() {
+ TableStatsMeta meta = new TableStatsMeta();
+ meta.addIndexRowForTest(1, 1);
+ meta.addIndexRowForTest(2, 2);
+ meta.addIndexRowForTest(3, 3);
+ Assertions.assertEquals(1, meta.getRowCount(1));
+ Assertions.assertEquals(2, meta.getRowCount(2));
+ Assertions.assertEquals(3, meta.getRowCount(3));
+ Assertions.assertEquals(-1, meta.getRowCount(4));
+
+ new MockUp<OlapTable>() {
+ @Mock
+ public List<Long> getIndexIdList() {
+ List<Long> result = Lists.newArrayList();
+ result.add(1L);
+ return result;
+ }
+ };
+
+ OlapTable table = new OlapTable();
+
+ meta.clearStaleIndexRowCount(table);
+ Assertions.assertEquals(1, meta.getRowCount(1));
+ Assertions.assertEquals(-1, meta.getRowCount(2));
+ Assertions.assertEquals(-1, meta.getRowCount(3));
+ Assertions.assertEquals(-1, meta.getRowCount(4));
+ }
}
diff --git a/regression-test/suites/statistics/test_analyze_mv.groovy
b/regression-test/suites/statistics/test_analyze_mv.groovy
index 21973ec331b..ad3d1667595 100644
--- a/regression-test/suites/statistics/test_analyze_mv.groovy
+++ b/regression-test/suites/statistics/test_analyze_mv.groovy
@@ -388,6 +388,30 @@ suite("test_analyze_mv") {
assertEquals("5001", result_sample[0][8])
assertEquals("FULL", result_sample[0][9])
+ // Test drop mv and other indexes' row still exist.
+ sql """DROP MATERIALIZED VIEW mv1 ON mvTestAgg;"""
+ sql """analyze table mvTestAgg with sync;"""
+ result_row = sql """show index stats mvTestAgg mvTestAgg"""
+ assertEquals(1, result_row.size())
+ assertEquals("mvTestAgg", result_row[0][0])
+ assertEquals("mvTestAgg", result_row[0][1])
+ assertEquals("5", result_row[0][2])
+ result_row = sql """show index stats mvTestAgg mv3"""
+ assertEquals(1, result_row.size())
+ assertEquals("mvTestAgg", result_row[0][0])
+ assertEquals("mv3", result_row[0][1])
+ assertEquals("5", result_row[0][2])
+ result_row = sql """show index stats mvTestAgg mv6"""
+ assertEquals(1, result_row.size())
+ assertEquals("mvTestAgg", result_row[0][0])
+ assertEquals("mv6", result_row[0][1])
+ assertEquals("4", result_row[0][2])
+ result_row = sql """show index stats mvTestAgg rollup1"""
+ assertEquals(1, result_row.size())
+ assertEquals("mvTestAgg", result_row[0][0])
+ assertEquals("rollup1", result_row[0][1])
+ assertEquals("4", result_row[0][2])
+
sql """
CREATE TABLE mvTestUni (
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]