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;
+    }
+
 }

Reply via email to