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

dengliming 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 f6d2f8a992 Refactor/decouple load balance metrics collection from 
divide plugin (#6429)
f6d2f8a992 is described below

commit f6d2f8a992b282c1ddc6c8d42869f1fd7c2232a6
Author: hengyuss <[email protected]>
AuthorDate: Tue Sep 15 16:01:40 2026 +0800

    Refactor/decouple load balance metrics collection from divide plugin (#6429)
    
    * refactor: Decouple load balance metrics collection from DividePlugin
    
    * test: add tests
    
    * fix: revert code
    
    ---------
    
    Co-authored-by: Liming Deng <[email protected]>
---
 .../main/java/org/apache/shenyu/plugin/divide/DividePlugin.java  | 8 +++-----
 .../java/org/apache/shenyu/plugin/divide/DividePluginTest.java   | 9 +++------
 2 files changed, 6 insertions(+), 11 deletions(-)

diff --git 
a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-divide/src/main/java/org/apache/shenyu/plugin/divide/DividePlugin.java
 
b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-divide/src/main/java/org/apache/shenyu/plugin/divide/DividePlugin.java
index b4947b9c16..3826a7ccd7 100644
--- 
a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-divide/src/main/java/org/apache/shenyu/plugin/divide/DividePlugin.java
+++ 
b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-divide/src/main/java/org/apache/shenyu/plugin/divide/DividePlugin.java
@@ -60,8 +60,6 @@ public class DividePlugin extends AbstractShenyuPlugin {
 
     private static final String SHORTEST_RESPONSE = "shortestResponse";
 
-    private Long beginTime;
-
     @Override
     protected String getRawPath(final ServerWebExchange exchange) {
         return RequestUrlUtils.getRewrittenRawPath(exchange);
@@ -134,8 +132,8 @@ public class DividePlugin extends AbstractShenyuPlugin {
             return chain.execute(exchange).doOnSuccess(e -> 
responseTrigger(upstream
             )).doOnError(throwable -> responseTrigger(upstream));
         } else if (ruleHandle.getLoadBalance().equals(SHORTEST_RESPONSE)) {
-            beginTime = System.currentTimeMillis();
-            return chain.execute(exchange).doOnSuccess(e -> 
successResponseTrigger(upstream
+            long beginTime = System.currentTimeMillis();
+            return chain.execute(exchange).doOnSuccess(e -> 
successResponseTrigger(upstream, beginTime
             ));
         }
         return chain.execute(exchange);
@@ -193,7 +191,7 @@ public class DividePlugin extends AbstractShenyuPlugin {
         upstream.setLag(lag);
     }
 
-    private void successResponseTrigger(final Upstream upstream) {
+    private void successResponseTrigger(final Upstream upstream, final long 
beginTime) {
         upstream.getSucceededElapsed().addAndGet(System.currentTimeMillis() - 
beginTime);
         upstream.getSucceeded().incrementAndGet();
     }
diff --git 
a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-divide/src/test/java/org/apache/shenyu/plugin/divide/DividePluginTest.java
 
b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-divide/src/test/java/org/apache/shenyu/plugin/divide/DividePluginTest.java
index 70109d02dc..04b44d7fc8 100644
--- 
a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-divide/src/test/java/org/apache/shenyu/plugin/divide/DividePluginTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-divide/src/test/java/org/apache/shenyu/plugin/divide/DividePluginTest.java
@@ -53,7 +53,6 @@ import org.springframework.web.server.ServerWebExchange;
 import reactor.core.publisher.Mono;
 import reactor.test.StepVerifier;
 
-import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.net.InetSocketAddress;
@@ -163,6 +162,7 @@ public final class DividePluginTest {
         loadBalancerFactoryMockedStatic.when(() -> 
LoadBalancerFactory.selector(any(), any(), any()))
                 .thenReturn(null);
         dividePlugin.doExecute(exchange, chain, selectorData, ruleData);
+        loadBalancerFactoryMockedStatic.close();
         // hit `Objects.requireNonNull(shenyuContext)`
         exchange.getAttributes().remove(Constants.CONTEXT);
         assertThrows(NullPointerException.class, () -> 
dividePlugin.doExecute(exchange, chain, selectorData, ruleData));
@@ -233,15 +233,12 @@ public final class DividePluginTest {
     @Test
     public void successResponseTriggerTest() throws Exception {
         dividePlugin = DividePlugin.class.newInstance();
-        Field field = DividePlugin.class.getDeclaredField("beginTime");
-        field.setAccessible(true);
-        field.set(dividePlugin, 0L);
-        Method method = 
DividePlugin.class.getDeclaredMethod("successResponseTrigger", Upstream.class);
+        Method method = 
DividePlugin.class.getDeclaredMethod("successResponseTrigger", Upstream.class, 
long.class);
         method.setAccessible(true);
         Upstream upstream = Upstream.builder()
                 .url("upstream")
                 .build();
-        method.invoke(dividePlugin, upstream);
+        method.invoke(dividePlugin, upstream, 0L);
         assertEquals(1, upstream.getSucceeded().get());
     }
 

Reply via email to