This is an automated email from the ASF dual-hosted git repository.

morrysnow pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.1 by this push:
     new 283d2d3e361 branch-3.1: [test](nereids) add ut for sql cache/sorted 
partition cache #55520 (#55536)
283d2d3e361 is described below

commit 283d2d3e36185545b62847383ac651cce75804e6
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Sep 4 10:35:40 2025 +0800

    branch-3.1: [test](nereids) add ut for sql cache/sorted partition cache 
#55520 (#55536)
    
    Cherry-picked from #55520
    
    Co-authored-by: 924060929 <[email protected]>
---
 .../cache/NereidsSortedPartitionsCacheManager.java |  7 ++
 .../doris/common/cache/NereidsSqlCacheManager.java |  7 ++
 .../apache/doris/qe/SortedPartitionsCacheTest.java | 81 ++++++++++++++++++++++
 .../java/org/apache/doris/qe/SqlCacheTest.java     | 19 ++++-
 .../apache/doris/utframe/TestWithFeService.java    | 18 +++++
 5 files changed, 131 insertions(+), 1 deletion(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/cache/NereidsSortedPartitionsCacheManager.java
 
b/fe/fe-core/src/main/java/org/apache/doris/common/cache/NereidsSortedPartitionsCacheManager.java
index 1ef5a9bdcbf..c7674113014 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/common/cache/NereidsSortedPartitionsCacheManager.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/common/cache/NereidsSortedPartitionsCacheManager.java
@@ -35,6 +35,7 @@ import org.apache.doris.rpc.RpcException;
 
 import com.github.benmanes.caffeine.cache.Cache;
 import com.github.benmanes.caffeine.cache.Caffeine;
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Range;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -105,6 +106,11 @@ public class NereidsSortedPartitionsCacheManager {
         return Optional.of(partitionCacheContext.sortedPartitionRanges);
     }
 
+    @VisibleForTesting
+    public Cache<TableIdentifier, PartitionCacheContext> getPartitionCaches() {
+        return partitionCaches;
+    }
+
     private SortedPartitionRanges<?> loadCache(
             TableIdentifier key, SupportBinarySearchFilteringPartitions table, 
CatalogRelation scan)
             throws RpcException {
@@ -182,6 +188,7 @@ public class NereidsSortedPartitionsCacheManager {
                 Config.expire_cache_partition_meta_table_in_fe_second
         );
         caches.putAll(cacheManager.partitionCaches.asMap());
+        caches.cleanUp();
         cacheManager.partitionCaches = caches;
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/cache/NereidsSqlCacheManager.java
 
b/fe/fe-core/src/main/java/org/apache/doris/common/cache/NereidsSqlCacheManager.java
index 66f72c4192c..3b4602e07bc 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/common/cache/NereidsSqlCacheManager.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/common/cache/NereidsSqlCacheManager.java
@@ -67,6 +67,7 @@ import org.apache.doris.rpc.RpcException;
 
 import com.github.benmanes.caffeine.cache.Cache;
 import com.github.benmanes.caffeine.cache.Caffeine;
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import org.apache.commons.collections.CollectionUtils;
@@ -98,6 +99,11 @@ public class NereidsSqlCacheManager {
         );
     }
 
+    @VisibleForTesting
+    public Cache<String, SqlCacheContext> getSqlCaches() {
+        return sqlCaches;
+    }
+
     public static synchronized void updateConfig() {
         Env currentEnv = Env.getCurrentEnv();
         if (currentEnv == null) {
@@ -113,6 +119,7 @@ public class NereidsSqlCacheManager {
                 Config.expire_sql_cache_in_fe_second
         );
         sqlCaches.putAll(sqlCacheManager.sqlCaches.asMap());
+        sqlCaches.cleanUp();
         sqlCacheManager.sqlCaches = sqlCaches;
     }
 
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/qe/SortedPartitionsCacheTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/qe/SortedPartitionsCacheTest.java
new file mode 100644
index 00000000000..e1349a93901
--- /dev/null
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/qe/SortedPartitionsCacheTest.java
@@ -0,0 +1,81 @@
+// 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.qe;
+
+import org.apache.doris.catalog.Env;
+import org.apache.doris.common.cache.NereidsSortedPartitionsCacheManager;
+import org.apache.doris.utframe.TestWithFeService;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class SortedPartitionsCacheTest extends TestWithFeService {
+
+    @Test
+    public void testPartitionCache() throws Exception {
+        createDatabase("test");
+        createTable("create table test.key_1_fixed_range_date_part (a int, dt 
datetime, c varchar(100)) duplicate key(a)\n"
+                + "partition by range(dt) (\n"
+                + "    PARTITION p_min VALUES LESS THAN (\"2023-01-01 
00:00:00\"),\n"
+                + "    PARTITION p_202301 VALUES [('2023-01-01 00:00:00'), 
('2023-02-01 00:00:00')),\n"
+                + "    PARTITION p_202302 VALUES [('2023-02-01 00:00:00'), 
('2023-03-01 00:00:00')),\n"
+                + "    PARTITION p_202303 VALUES [('2023-03-01 00:00:00'), 
('2023-04-01 00:00:00')),\n"
+                + "    PARTITION p_202304 VALUES [('2023-04-01 00:00:00'), 
('2023-05-01 00:00:00')),\n"
+                + "    PARTITION p_202305 VALUES [('2023-05-01 00:00:00'), 
('2023-06-01 00:00:00')),\n"
+                + "    PARTITION p_202306 VALUES [('2023-06-01 00:00:00'), 
('2023-07-01 00:00:00')),\n"
+                + "    PARTITION p_202307 VALUES [('2023-07-01 00:00:00'), 
('2023-08-01 00:00:00')),\n"
+                + "    PARTITION p_202308 VALUES [('2023-08-01 00:00:00'), 
('2023-09-01 00:00:00')),\n"
+                + "    PARTITION p_202309 VALUES [('2023-09-01 00:00:00'), 
('2023-10-01 00:00:00')),\n"
+                + "    PARTITION p_202310 VALUES [('2023-10-01 00:00:00'), 
('2023-11-01 00:00:00')),\n"
+                + "    PARTITION p_202311 VALUES [('2023-11-01 00:00:00'), 
('2023-12-01 00:00:00')),\n"
+                + "    PARTITION p_202312 VALUES [('2023-12-01 00:00:00'), 
('2024-01-01 00:00:00')),\n"
+                + "    PARTITION p_max VALUES [('2024-01-01 00:00:00'), 
('9999-12-31 23:59:59'))\n"
+                + ") distributed by hash(a) 
properties(\"replication_num\"=\"1\");");
+
+        createTable("create table test.key_1_fixed_range_date_part2 (a int, dt 
datetime, c varchar(100)) duplicate key(a)\n"
+                + "partition by range(dt) (\n"
+                + "    PARTITION p_min VALUES LESS THAN (\"2023-01-01 
00:00:00\"),\n"
+                + "    PARTITION p_202301 VALUES [('2023-01-01 00:00:00'), 
('2023-02-01 00:00:00')),\n"
+                + "    PARTITION p_202302 VALUES [('2023-02-01 00:00:00'), 
('2023-03-01 00:00:00')),\n"
+                + "    PARTITION p_202303 VALUES [('2023-03-01 00:00:00'), 
('2023-04-01 00:00:00')),\n"
+                + "    PARTITION p_202304 VALUES [('2023-04-01 00:00:00'), 
('2023-05-01 00:00:00')),\n"
+                + "    PARTITION p_202305 VALUES [('2023-05-01 00:00:00'), 
('2023-06-01 00:00:00')),\n"
+                + "    PARTITION p_202306 VALUES [('2023-06-01 00:00:00'), 
('2023-07-01 00:00:00')),\n"
+                + "    PARTITION p_202307 VALUES [('2023-07-01 00:00:00'), 
('2023-08-01 00:00:00')),\n"
+                + "    PARTITION p_202308 VALUES [('2023-08-01 00:00:00'), 
('2023-09-01 00:00:00')),\n"
+                + "    PARTITION p_202309 VALUES [('2023-09-01 00:00:00'), 
('2023-10-01 00:00:00')),\n"
+                + "    PARTITION p_202310 VALUES [('2023-10-01 00:00:00'), 
('2023-11-01 00:00:00')),\n"
+                + "    PARTITION p_202311 VALUES [('2023-11-01 00:00:00'), 
('2023-12-01 00:00:00')),\n"
+                + "    PARTITION p_202312 VALUES [('2023-12-01 00:00:00'), 
('2024-01-01 00:00:00')),\n"
+                + "    PARTITION p_max VALUES [('2024-01-01 00:00:00'), 
('9999-12-31 23:59:59'))\n"
+                + ") distributed by hash(a) 
properties(\"replication_num\"=\"1\");");
+
+        // wait cache enable
+        Thread.sleep(10 * 1000);
+
+        executeNereidsSql("select * from test.key_1_fixed_range_date_part 
where dt='2023-07-01 05:00:00'");
+        executeNereidsSql("select * from test.key_1_fixed_range_date_part2 
where dt='2023-07-01 05:00:00'");
+
+        Env currentEnv = Env.getCurrentEnv();
+        NereidsSortedPartitionsCacheManager sortedPartitionsCacheManager = 
currentEnv.getSortedPartitionsCacheManager();
+        Assertions.assertEquals(2, 
sortedPartitionsCacheManager.getPartitionCaches().asMap().size());
+
+        executeNereidsSql("admin set frontend config 
('cache_partition_meta_table_manage_num'='1')");
+        Assertions.assertEquals(1, 
sortedPartitionsCacheManager.getPartitionCaches().asMap().size());
+    }
+}
diff --git a/fe/fe-core/src/test/java/org/apache/doris/qe/SqlCacheTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/qe/SqlCacheTest.java
index f67d037fdf6..3b0a6bd2f34 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/qe/SqlCacheTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/qe/SqlCacheTest.java
@@ -18,9 +18,12 @@
 package org.apache.doris.qe;
 
 import org.apache.doris.analysis.UserIdentity;
+import org.apache.doris.catalog.Env;
+import org.apache.doris.common.cache.NereidsSqlCacheManager;
 import org.apache.doris.nereids.SqlCacheContext;
 import org.apache.doris.proto.Types.PUniqueId;
 import org.apache.doris.thrift.TUniqueId;
+import org.apache.doris.utframe.TestWithFeService;
 
 import com.google.common.collect.ImmutableSet;
 import org.junit.jupiter.api.Assertions;
@@ -28,7 +31,7 @@ import org.junit.jupiter.api.Test;
 
 import java.util.UUID;
 
-public class SqlCacheTest {
+public class SqlCacheTest extends TestWithFeService {
     @Test
     public void testCacheKey() {
         TUniqueId queryId = new TUniqueId();
@@ -57,4 +60,18 @@ public class SqlCacheTest {
         PUniqueId key3 = cacheContext3.doComputeCacheKeyMd5(ImmutableSet.of());
         Assertions.assertNotEquals(key1, key3);
     }
+
+    @Test
+    public void testSqlCache() throws Exception {
+        connectContext.getSessionVariable().setEnableSqlCache(true);
+        executeNereidsSql("select 100");
+        executeNereidsSql("select 200");
+
+        Env currentEnv = Env.getCurrentEnv();
+        NereidsSqlCacheManager sqlCacheManager = 
currentEnv.getSqlCacheManager();
+        Assertions.assertEquals(2, 
sqlCacheManager.getSqlCaches().asMap().size());
+
+        executeNereidsSql("admin set frontend config 
('sql_cache_manage_num'='1')");
+        Assertions.assertEquals(1, 
sqlCacheManager.getSqlCaches().asMap().size());
+    }
 }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java 
b/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java
index 95d9a4e0e98..e9e7c04572f 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java
@@ -626,6 +626,24 @@ public abstract class TestWithFeService {
         }
     }
 
+    public void executeNereidsSql(String queryStr) throws Exception {
+        connectContext.getState().reset();
+
+        StatementContext statementContext = new 
StatementContext(connectContext, new OriginStatement(queryStr, 0));
+        connectContext.setStatementContext(statementContext);
+        statementContext.setConnectContext(connectContext);
+
+        LogicalPlan plan = new NereidsParser().parseSingle(queryStr);
+        LogicalPlanAdapter logicalPlanAdapter = new LogicalPlanAdapter(plan, 
statementContext);
+        logicalPlanAdapter.setOrigStmt(statementContext.getOriginStatement());
+        StmtExecutor stmtExecutor = new StmtExecutor(connectContext, 
logicalPlanAdapter);
+        stmtExecutor.execute();
+        if (connectContext.getState().getStateType() == 
QueryState.MysqlStateType.ERR
+                || connectContext.getState().getErrorCode() != null) {
+            throw new 
IllegalStateException(connectContext.getState().getErrorMessage());
+        }
+    }
+
     public void createDatabase(String db) throws Exception {
         String createDbStmtStr = "CREATE DATABASE " + db;
         CreateDbStmt createDbStmt = (CreateDbStmt) 
parseAndAnalyzeStmt(createDbStmtStr);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to