This is an automated email from the ASF dual-hosted git repository.
lijibing pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new 298cf98d1b7 [fix](statistics)Fix clear stale mv row count bug.
(#41653) (#41922)
298cf98d1b7 is described below
commit 298cf98d1b7e5133b3f8289642d24535f7200368
Author: Jibing-Li <[email protected]>
AuthorDate: Wed Oct 16 15:13:29 2024 +0800
[fix](statistics)Fix clear stale mv row count bug. (#41653) (#41922)
backport: https://github.com/apache/doris/pull/41653
---
.../apache/doris/statistics/TableStatsMeta.java | 19 ++++++-------
.../doris/statistics/TableStatsMetaTest.java | 33 ++++++++++++++++++++++
.../suites/statistics/test_analyze_mv.groovy | 24 ++++++++++++++++
3 files changed, 65 insertions(+), 11 deletions(-)
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 61a5a9b1f88..9c8959d807b 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
@@ -154,10 +154,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();
}
@@ -230,21 +226,22 @@ 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);
+ }
+
public long getBaseIndexDeltaRowCount(OlapTable table) {
if (colToColStatsMeta == null || colToColStatsMeta.isEmpty() ||
userInjected) {
return 0;
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 10e1973aa33..83e68e3090c 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.HashSet;
+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 2d7b4aaea7d..125c7bce806 100644
--- a/regression-test/suites/statistics/test_analyze_mv.groovy
+++ b/regression-test/suites/statistics/test_analyze_mv.groovy
@@ -389,6 +389,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]