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]

Reply via email to