This is an automated email from the ASF dual-hosted git repository. liuhongyu 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 5be0bf6d74 [type:fix] fix(logging-clickhouse): avoid unnecessary config refresh when clickhouse config unchanged. (#5984) 5be0bf6d74 is described below commit 5be0bf6d7422bfc478ce122800f5c21960681352 Author: yqw570994511 <49865334+yqw570994...@users.noreply.github.com> AuthorDate: Mon Mar 31 14:27:10 2025 +0800 [type:fix] fix(logging-clickhouse): avoid unnecessary config refresh when clickhouse config unchanged. (#5984) Co-authored-by: yuqianwei <qq120405> Co-authored-by: aias00 <liuhon...@apache.org> --- .../config/ClickHouseLogCollectConfig.java | 30 ++++++++++++ .../LoggingClickHousePluginDataHandlerTest.java | 57 +++++++++++++++++++--- 2 files changed, 79 insertions(+), 8 deletions(-) diff --git a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-clickhouse/src/main/java/org/apache/shenyu/plugin/logging/clickhouse/config/ClickHouseLogCollectConfig.java b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-clickhouse/src/main/java/org/apache/shenyu/plugin/logging/clickhouse/config/ClickHouseLogCollectConfig.java index e66336ed53..1a70d9d96a 100644 --- a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-clickhouse/src/main/java/org/apache/shenyu/plugin/logging/clickhouse/config/ClickHouseLogCollectConfig.java +++ b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-clickhouse/src/main/java/org/apache/shenyu/plugin/logging/clickhouse/config/ClickHouseLogCollectConfig.java @@ -19,6 +19,7 @@ package org.apache.shenyu.plugin.logging.clickhouse.config; import org.apache.shenyu.plugin.logging.common.config.GenericGlobalConfig; +import java.util.Objects; import java.util.Optional; /** @@ -206,6 +207,35 @@ public class ClickHouseLogCollectConfig { public void setDatabase(final String database) { this.database = database; } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return Boolean.TRUE; + } + if (Objects.isNull(o) || getClass() != o.getClass()) { + return Boolean.FALSE; + } + ClickHouseLogConfig that = (ClickHouseLogConfig) o; + + return Objects.equals(getHost(), that.getHost()) + && Objects.equals(getPort(), that.getPort()) + && Objects.equals(getUsername(), that.getUsername()) + && Objects.equals(getPassword(), that.getPassword()) + && Objects.equals(getDatabase(), that.getDatabase()) + && Objects.equals(getClusterName(), that.getClusterName()) + && Objects.equals(getEngine(), that.getEngine()) + && Objects.equals(getTtl(), that.getTtl()) + && Objects.equals(getSampleRate(), that.getSampleRate()) + && Objects.equals(getBufferQueueSize(), that.getBufferQueueSize()) + && Objects.equals(getMaxResponseBody(), that.getMaxResponseBody()) + && Objects.equals(getMaxRequestBody(), that.getMaxRequestBody()); + } + + @Override + public int hashCode() { + return Objects.hash(host, port, username, password, database, clusterName, engine, ttl); + } } } diff --git a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-clickhouse/src/test/java/org/apache/shenyu/plugin/logging/clickhouse/handler/LoggingClickHousePluginDataHandlerTest.java b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-clickhouse/src/test/java/org/apache/shenyu/plugin/logging/clickhouse/handler/LoggingClickHousePluginDataHandlerTest.java index c94e34896b..2b952472e0 100644 --- a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-clickhouse/src/test/java/org/apache/shenyu/plugin/logging/clickhouse/handler/LoggingClickHousePluginDataHandlerTest.java +++ b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-clickhouse/src/test/java/org/apache/shenyu/plugin/logging/clickhouse/handler/LoggingClickHousePluginDataHandlerTest.java @@ -18,31 +18,38 @@ package org.apache.shenyu.plugin.logging.clickhouse.handler; import org.apache.shenyu.common.dto.PluginData; +import org.apache.shenyu.common.utils.Singleton; +import org.apache.shenyu.plugin.logging.clickhouse.config.ClickHouseLogCollectConfig; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; +import org.mockito.junit.jupiter.MockitoSettings; +import org.mockito.quality.Strictness; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; /** * The Test Case For ClickHousePluginDataHandler. */ +@ExtendWith(MockitoExtension.class) +@MockitoSettings(strictness = Strictness.LENIENT) public final class LoggingClickHousePluginDataHandlerTest { private LoggingClickHousePluginDataHandler loggingClickHousePluginDataHandler; @BeforeEach public void setUp() { - loggingClickHousePluginDataHandler = new LoggingClickHousePluginDataHandler(); + loggingClickHousePluginDataHandler = Mockito.spy(new LoggingClickHousePluginDataHandler()); } @Test public void testHandlerPlugin() { - PluginData pluginData = new PluginData(); - pluginData.setConfig("{\"host\":\"127.0.0.1\",\"port\":\"8123\",\"database\":\"shenyu-gateway\",\"username\":\"foo\",\"password\":\"bar\", \"ttl\":\"30\"}"); - pluginData.setEnabled(true); - pluginData.setId("37"); - pluginData.setName("loggingClickHouse"); - pluginData.setRole("Logging"); - pluginData.setSort(195); + PluginData pluginData = createPluginData(); loggingClickHousePluginDataHandler.handlerPlugin(pluginData); Assertions.assertNull(null); } @@ -52,4 +59,38 @@ public final class LoggingClickHousePluginDataHandlerTest { Assertions.assertEquals(loggingClickHousePluginDataHandler.pluginNamed(), "loggingClickHouse"); } + @Test + void testHandlerPluginUpdateSameConfig() { + ClickHouseLogCollectConfig.ClickHouseLogConfig existingConfig = createValidConfig(); + Singleton.INST.single(existingConfig.getClass(), existingConfig); + + PluginData pluginData = createPluginData(); + + loggingClickHousePluginDataHandler.handlerPlugin(pluginData); + + verify(loggingClickHousePluginDataHandler, never()).doRefreshConfig(any()); + } + + private ClickHouseLogCollectConfig.ClickHouseLogConfig createValidConfig() { + ClickHouseLogCollectConfig.ClickHouseLogConfig config = new ClickHouseLogCollectConfig.ClickHouseLogConfig(); + config.setHost("127.0.0.1"); + config.setPort("8123"); + config.setDatabase("shenyu-gateway"); + config.setUsername("foo"); + config.setPassword("bar"); + config.setTtl("30"); + return config; + } + + private PluginData createPluginData() { + PluginData pluginData = new PluginData(); + pluginData.setConfig("{\"host\":\"127.0.0.1\",\"port\":\"8123\",\"database\":\"shenyu-gateway\",\"username\":\"foo\",\"password\":\"bar\", \"ttl\":\"30\"}"); + pluginData.setEnabled(true); + pluginData.setId("37"); + pluginData.setName("loggingClickHouse"); + pluginData.setRole("Logging"); + pluginData.setSort(195); + return pluginData; + } + }