You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shenyu.apache.org by li...@apache.org on 2026/09/04 00:20:59 UTC
(shenyu) branch master updated: fix: correct scale rule count query (#6992)
This is an automated email from the ASF dual-hosted git repository.
Aias00 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new 6f01006819 fix: correct scale rule count query (#6992)
6f01006819 is described below
commit 6f0100681987851cb9bfe93d6a892c6e0cb20e1b
Author: Southern <49...@qq.com>
AuthorDate: Fri Sep 4 08:20:53 2026 +0800
fix: correct scale rule count query (#6992)
Added a <where> clause to countByQuery and changed metric filtering to use LIKE for consistent fuzzy matching.
Co-authored-by: aias00 <li...@apache.org>
---
.../main/resources/mappers/scale-rule-sqlmap.xml | 8 +-
.../shenyu/admin/mapper/ScaleRuleMapperTest.java | 91 ++++++++++++++++++++++
2 files changed, 96 insertions(+), 3 deletions(-)
diff --git a/shenyu-admin/src/main/resources/mappers/scale-rule-sqlmap.xml b/shenyu-admin/src/main/resources/mappers/scale-rule-sqlmap.xml
index 5123b367f8..4363a25f30 100644
--- a/shenyu-admin/src/main/resources/mappers/scale-rule-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/scale-rule-sqlmap.xml
@@ -156,9 +156,11 @@
</insert>
<select id="countByQuery" parameterType="org.apache.shenyu.admin.model.query.ScaleRuleQuery" resultType="java.lang.Long">
select count(*) from scale_rule
- <if test="metricName != null">
- and metric_name = #{metricName, jdbcType=VARCHAR}
- </if>
+ <where>
+ <if test="metricName != null">
+ and metric_name like CONCAT('%', #{metricName, jdbcType=VARCHAR}, '%')
+ </if>
+ </where>
</select>
<update id="updateByPrimaryKeySelective" parameterType="org.apache.shenyu.admin.model.entity.ScaleRuleDO">
update scale_rule
diff --git a/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/ScaleRuleMapperTest.java b/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/ScaleRuleMapperTest.java
new file mode 100644
index 0000000000..67b85e17e6
--- /dev/null
+++ b/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/ScaleRuleMapperTest.java
@@ -0,0 +1,91 @@
+/*
+ * 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.shenyu.admin.mapper;
+
+import org.apache.shenyu.admin.AbstractSpringIntegrationTest;
+import org.apache.shenyu.admin.model.entity.ScaleRuleDO;
+import org.apache.shenyu.admin.model.query.ScaleRuleQuery;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.sql.Timestamp;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+
+/**
+ * Test cases for {@linkplain ScaleRuleMapper}.
+ */
+public final class ScaleRuleMapperTest extends AbstractSpringIntegrationTest {
+
+ private static final String CPU_RULE_ID = "scale-rule-mapper-test-cpu";
+
+ private static final String MEMORY_RULE_ID = "scale-rule-mapper-test-memory";
+
+ @Autowired
+ private ScaleRuleMapper scaleRuleMapper;
+
+ private long initialCount;
+
+ @BeforeEach
+ public void insertTestScaleRules() {
+ initialCount = scaleRuleMapper.countByQuery(new ScaleRuleQuery());
+ scaleRuleMapper.insert(buildScaleRule(CPU_RULE_ID, "cpu_usage"));
+ scaleRuleMapper.insert(buildScaleRule(MEMORY_RULE_ID, "memory_usage"));
+ }
+
+ @AfterEach
+ public void deleteTestScaleRules() {
+ scaleRuleMapper.delete(Arrays.asList(CPU_RULE_ID, MEMORY_RULE_ID));
+ }
+
+ @Test
+ public void countByQueryUsesSameLikePredicateAsSelectByQuery() {
+ ScaleRuleQuery query = new ScaleRuleQuery();
+ query.setMetricName("cpu");
+
+ List<ScaleRuleDO> selected = scaleRuleMapper.selectByQuery(query);
+
+ assertThat(selected.size(), equalTo(1));
+ assertThat(scaleRuleMapper.countByQuery(query), equalTo(1L));
+ }
+
+ @Test
+ public void countByQueryWithoutMetricNameCountsAllRules() {
+ assertThat(scaleRuleMapper.countByQuery(new ScaleRuleQuery()), equalTo(initialCount + 2));
+ }
+
+ private ScaleRuleDO buildScaleRule(final String id, final String metricName) {
+ Timestamp now = new Timestamp(System.currentTimeMillis());
+ return ScaleRuleDO.builder()
+ .id(id)
+ .dateCreated(now)
+ .dateUpdated(now)
+ .metricName(metricName)
+ .type(0)
+ .sort(1)
+ .status(1)
+ .minimum("0")
+ .maximum("100")
+ .build();
+ }
+}