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());
}