This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/master by this push:
new d63d1db [SCB-2112]isolation recovery should be immediatly after
success (#2059)
d63d1db is described below
commit d63d1dba9dd5695eab8b168df14debcf5afa41ce
Author: bao liu <[email protected]>
AuthorDate: Mon Nov 16 16:55:21 2020 +0800
[SCB-2112]isolation recovery should be immediatly after success (#2059)
---
.../discovery/EndpointDiscoveryFilter.java | 3 +-
.../discovery/TestEndpointDiscoveryFilter.java | 4 +-
.../client/CustomEndpointDiscoveryFilter.java | 3 +-
.../discovery/AbstractEndpointDiscoveryFilter.java | 5 ++-
.../TestAbstractTransportDiscoveryFilter.java | 3 +-
.../servicecomb/loadbalance/Configuration.java | 9 ++++
.../loadbalance/ServiceCombLoadBalancerStats.java | 4 +-
.../servicecomb/loadbalance/ServiceCombServer.java | 13 ++++--
.../loadbalance/ServiceCombServerStats.java | 50 ++++++++++++++++------
.../loadbalance/event/IsolationServerEvent.java | 2 +-
.../filter/IsolationDiscoveryFilter.java | 5 ++-
.../loadbalance/filter/ServerDiscoveryFilter.java | 9 ++--
.../loadbalance/TestLoadBalanceCreator.java | 16 +++----
.../loadbalance/TestLoadBalanceHandler2.java | 16 +++----
.../loadbalance/TestLoadbalanceHandler.java | 6 +--
.../TestServiceCombLoadBalancerStats.java | 10 ++---
.../loadbalance/TestServiceCombServer.java | 6 +--
.../loadbalance/TestServiceCombServerStats.java | 10 ++---
.../loadbalance/TestSessionSticknessRule.java | 6 +--
.../filter/IsolationDiscoveryFilterTest.java | 10 +++--
.../filter/TestServerDiscoveryFilter.java | 13 ++++--
21 files changed, 129 insertions(+), 74 deletions(-)
diff --git
a/core/src/main/java/org/apache/servicecomb/core/registry/discovery/EndpointDiscoveryFilter.java
b/core/src/main/java/org/apache/servicecomb/core/registry/discovery/EndpointDiscoveryFilter.java
index a6c3efc..80c060e 100644
---
a/core/src/main/java/org/apache/servicecomb/core/registry/discovery/EndpointDiscoveryFilter.java
+++
b/core/src/main/java/org/apache/servicecomb/core/registry/discovery/EndpointDiscoveryFilter.java
@@ -43,7 +43,8 @@ public class EndpointDiscoveryFilter extends
AbstractEndpointDiscoveryFilter {
}
@Override
- protected Object createEndpoint(String transportName, String endpoint,
MicroserviceInstance instance) {
+ protected Object createEndpoint(DiscoveryContext context, String
transportName, String endpoint,
+ MicroserviceInstance instance) {
Transport transport =
SCBEngine.getInstance().getTransportManager().findTransport(transportName);
if (transport == null) {
LOGGER.info("not deployed transport {}, ignore {}.", transportName,
endpoint);
diff --git
a/core/src/test/java/org/apache/servicecomb/core/registry/discovery/TestEndpointDiscoveryFilter.java
b/core/src/test/java/org/apache/servicecomb/core/registry/discovery/TestEndpointDiscoveryFilter.java
index 461e15a..9afa690 100644
---
a/core/src/test/java/org/apache/servicecomb/core/registry/discovery/TestEndpointDiscoveryFilter.java
+++
b/core/src/test/java/org/apache/servicecomb/core/registry/discovery/TestEndpointDiscoveryFilter.java
@@ -78,7 +78,7 @@ public class TestEndpointDiscoveryFilter {
@Test
public void createEndpointNullTransport() {
- Assert.assertNull(filter.createEndpoint(Const.RESTFUL, "", null));
+ Assert.assertNull(filter.createEndpoint(null, Const.RESTFUL, "", null));
}
@Test
@@ -95,7 +95,7 @@ public class TestEndpointDiscoveryFilter {
}
};
- Endpoint ep = (Endpoint) filter.createEndpoint(Const.RESTFUL, endpoint,
instance);
+ Endpoint ep = (Endpoint) filter.createEndpoint(null, Const.RESTFUL,
endpoint, instance);
Assert.assertSame(transport, ep.getTransport());
Assert.assertSame(address, ep.getAddress());
Assert.assertSame(instance, ep.getMicroserviceInstance());
diff --git
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CustomEndpointDiscoveryFilter.java
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CustomEndpointDiscoveryFilter.java
index d5b4f11..aa3ee5d 100644
---
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CustomEndpointDiscoveryFilter.java
+++
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CustomEndpointDiscoveryFilter.java
@@ -30,7 +30,8 @@ public class CustomEndpointDiscoveryFilter extends
AbstractEndpointDiscoveryFilt
}
@Override
- protected Object createEndpoint(String transportName, String endpoint,
MicroserviceInstance instance) {
+ protected Object createEndpoint(DiscoveryContext context, String
transportName, String endpoint,
+ MicroserviceInstance instance) {
return endpoint;
}
diff --git
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/AbstractEndpointDiscoveryFilter.java
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/AbstractEndpointDiscoveryFilter.java
index db1d759..1aa2d61 100644
---
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/AbstractEndpointDiscoveryFilter.java
+++
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/AbstractEndpointDiscoveryFilter.java
@@ -56,7 +56,7 @@ public abstract class AbstractEndpointDiscoveryFilter
implements DiscoveryFilter
continue;
}
- Object objEndpoint = createEndpoint(transportName, endpoint,
instance);
+ Object objEndpoint = createEndpoint(context, transportName,
endpoint, instance);
if (objEndpoint == null) {
continue;
}
@@ -79,5 +79,6 @@ public abstract class AbstractEndpointDiscoveryFilter
implements DiscoveryFilter
protected abstract String findTransportName(DiscoveryContext context,
DiscoveryTreeNode parent);
- protected abstract Object createEndpoint(String transportName, String
endpoint, MicroserviceInstance instance);
+ protected abstract Object createEndpoint(DiscoveryContext context, String
transportName, String endpoint,
+ MicroserviceInstance instance);
}
diff --git
a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestAbstractTransportDiscoveryFilter.java
b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestAbstractTransportDiscoveryFilter.java
index 6d72947..c1f8da8 100644
---
a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestAbstractTransportDiscoveryFilter.java
+++
b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestAbstractTransportDiscoveryFilter.java
@@ -45,7 +45,8 @@ public class TestAbstractTransportDiscoveryFilter {
}
@Override
- protected Object createEndpoint(String transportName, String endpoint,
MicroserviceInstance instance) {
+ protected Object createEndpoint(DiscoveryContext context, String
transportName, String endpoint,
+ MicroserviceInstance instance) {
if (disableCreate) {
return null;
}
diff --git
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java
index 6ff3539..a31895a 100644
---
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java
+++
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java
@@ -64,6 +64,8 @@ public final class Configuration {
public static final String FILTER_ENABLE_REQUEST = "enableRequestThreshold";
+ public static final String FILTER_RECOVER_IMMEDIATELY_WHEN_SUCCESS =
"recoverImmediatelyWhenSuccess";
+
public static final String FILTER_SINGLE_TEST = "singleTestTime";
public static final String FILTER_MAX_SINGLE_TEST_WINDOW =
"maxSingleTestWindow";
@@ -221,6 +223,13 @@ public final class Configuration {
}
}
+ public boolean isRecoverImmediatelyWhenSuccess(String microservice) {
+ String p = getStringProperty("true",
+ ROOT + microservice + "." + FILTER_ISOLATION +
FILTER_RECOVER_IMMEDIATELY_WHEN_SUCCESS,
+ ROOT + FILTER_ISOLATION + FILTER_RECOVER_IMMEDIATELY_WHEN_SUCCESS);
+ return Boolean.parseBoolean(p);
+ }
+
public Map<String, String> getFlowsplitFilterOptions(String microservice) {
String keyPrefix =
String.format(TRANSACTIONCONTROL_OPTIONS_PREFIX_PATTERN, microservice);
return ConfigurePropertyUtils.getPropertiesWithPrefix(keyPrefix);
diff --git
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombLoadBalancerStats.java
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombLoadBalancerStats.java
index f2cdfa9..bf40ec6 100644
---
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombLoadBalancerStats.java
+++
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombLoadBalancerStats.java
@@ -147,7 +147,7 @@ public class ServiceCombLoadBalancerStats {
.build(
new CacheLoader<ServiceCombServer, ServiceCombServerStats>() {
public ServiceCombServerStats load(ServiceCombServer server)
{
- ServiceCombServerStats stats = new
ServiceCombServerStats();
+ ServiceCombServerStats stats = new
ServiceCombServerStats(server.getMicroserviceName());
pingView.put(server, stats);
serviceCombServers.put(server.getInstance().getInstanceId(), server);
return stats;
@@ -166,7 +166,7 @@ public class ServiceCombLoadBalancerStats {
ServiceCombServer server =
serviceCombServerServiceCombServerStatsEntry.getKey();
ServiceCombServerStats stats =
serviceCombServerServiceCombServerStatsEntry.getValue();
if ((System.currentTimeMillis() - stats.getLastVisitTime() >
timerIntervalInMillis) && !ping
- .ping(server.getInstance())) {
+ .ping(server.getInstance())) {
LOGGER.info("ping mark server {} failure.",
server.getInstance().getInstanceId());
stats.markFailure();
}
diff --git
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombServer.java
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombServer.java
index 47cb912..e9d1375 100644
---
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombServer.java
+++
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombServer.java
@@ -39,11 +39,14 @@ public class ServiceCombServer extends Server {
// 所属服务实例
private final MicroserviceInstance instance;
+ private final String microserviceName;
+
@VisibleForTesting
- ServiceCombServer(Endpoint endpoint, MicroserviceInstance instance) {
+ ServiceCombServer(String microserviceName, Endpoint endpoint,
MicroserviceInstance instance) {
super(null);
this.endpoint = endpoint;
this.instance = instance;
+ this.microserviceName = microserviceName;
// Different types of Robin Component Rule have different usages for
server status and list.
// e.g. RoundRobinRule using getAllServers & alive & readyToServe
@@ -54,9 +57,9 @@ public class ServiceCombServer extends Server {
this.setReadyToServe(true);
}
- public ServiceCombServer(Transport transport, CacheEndpoint cacheEndpoint) {
+ public ServiceCombServer(String microserviceName, Transport transport,
CacheEndpoint cacheEndpoint) {
super(null);
-
+ this.microserviceName = microserviceName;
endpoint = new Endpoint(transport, cacheEndpoint.getEndpoint(),
cacheEndpoint.getInstance());
instance = cacheEndpoint.getInstance();
@@ -75,6 +78,10 @@ public class ServiceCombServer extends Server {
}
}
+ public String getMicroserviceName() {
+ return this.microserviceName;
+ }
+
public Endpoint getEndpoint() {
return endpoint;
}
diff --git
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombServerStats.java
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombServerStats.java
index 6afc0f6..d867da3 100644
---
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombServerStats.java
+++
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombServerStats.java
@@ -55,6 +55,8 @@ public class ServiceCombServerStats {
private long lastActiveTime;
+ private long isolatedTime;
+
private AtomicLong totalRequests;
private AtomicLong successRequests;
@@ -63,13 +65,15 @@ public class ServiceCombServerStats {
private boolean isolated = false;
- public ServiceCombServerStats() {
- this.clock = TimeUtils.getSystemDefaultZoneClock();
- init();
+ private String microserviceName;
+
+ public ServiceCombServerStats(String microserviceName) {
+ this(microserviceName, TimeUtils.getSystemDefaultZoneClock());
}
- public ServiceCombServerStats(Clock clock) {
+ public ServiceCombServerStats(String microserviceName, Clock clock) {
this.clock = clock;
+ this.microserviceName = microserviceName;
init();
}
@@ -117,19 +121,29 @@ public class ServiceCombServerStats {
public void markIsolated(boolean isolated) {
this.isolated = isolated;
+ this.isolatedTime = System.currentTimeMillis();
}
public void markSuccess() {
long time = clock.millis();
ensureWindow(time);
- lastVisitTime = time;
- lastActiveTime = time;
+
+ if (isolated) {
+ if
(Configuration.INSTANCE.isRecoverImmediatelyWhenSuccess(microserviceName)
+ && time - this.isolatedTime > Configuration.INSTANCE
+ .getMinIsolationTime(microserviceName)) {
+ resetStats();
+ LOGGER.info("trying server invocation success, and reset stats.");
+ } else {
+ LOGGER.info("trying server invocation success!");
+ }
+ }
+
totalRequests.incrementAndGet();
successRequests.incrementAndGet();
continuousFailureCount.set(0);
- if (isolated) {
- LOGGER.info("trying server invocation success!");
- }
+ lastVisitTime = time;
+ lastActiveTime = time;
}
public void markFailure() {
@@ -150,10 +164,7 @@ public class ServiceCombServerStats {
synchronized (lock) {
if (time - lastWindow > TIME_WINDOW_IN_MILLISECONDS) {
if (!isolated) {
- continuousFailureCount.set(0);
- totalRequests.set(0);
- successRequests.set(0);
- failedRequests.set(0);
+ resetStats();
}
lastWindow = time;
}
@@ -161,15 +172,26 @@ public class ServiceCombServerStats {
}
}
+ private void resetStats() {
+ continuousFailureCount.set(0);
+ totalRequests.set(0);
+ successRequests.set(0);
+ failedRequests.set(0);
+ }
+
public long getLastVisitTime() {
return lastVisitTime;
}
+ public long getIsolatedTime() {
+ return isolatedTime;
+ }
+
public long getLastActiveTime() {
return lastActiveTime;
}
- public long getCountinuousFailureCount() {
+ public long getContinuousFailureCount() {
return continuousFailureCount.get();
}
diff --git
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/event/IsolationServerEvent.java
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/event/IsolationServerEvent.java
index 84adb78..115a161 100644
---
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/event/IsolationServerEvent.java
+++
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/event/IsolationServerEvent.java
@@ -57,7 +57,7 @@ public class IsolationServerEvent extends AlarmEvent {
this.microserviceName = invocation.getMicroserviceName();
this.endpoint = endpoint;
this.currentTotalRequest = serverStats.getTotalRequests();
- this.currentCountinuousFailureCount =
serverStats.getCountinuousFailureCount();
+ this.currentCountinuousFailureCount =
serverStats.getContinuousFailureCount();
this.currentErrorPercentage = serverStats.getFailedRate();
this.minIsolationTime = settings.minIsolationTime;
this.enableRequestThreshold = settings.enableRequestThreshold;
diff --git
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/IsolationDiscoveryFilter.java
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/IsolationDiscoveryFilter.java
index 46dec17..c8693d9 100644
---
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/IsolationDiscoveryFilter.java
+++
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/IsolationDiscoveryFilter.java
@@ -147,6 +147,7 @@ public class IsolationDiscoveryFilter implements
DiscoveryFilter {
return ServiceCombServerStats.applyForTryingChance(invocation);
}
if (!serverStats.isIsolated()) {
+ // checkThresholdAllowed is not concurrent control, may print several
logs/events in current access.
serverStats.markIsolated(true);
eventBus.post(
new IsolationServerEvent(invocation, instance, serverStats,
@@ -159,7 +160,7 @@ public class IsolationDiscoveryFilter implements
DiscoveryFilter {
if (serverStats.isIsolated()) {
// [2] so that we add a feature to isolate for at least a minimal time,
and we can avoid
// high volume of concurrent requests with a percentage of error(e.g.
50%) scenario with no isolation
- if ((System.currentTimeMillis() - serverStats.getLastVisitTime()) <=
settings.minIsolationTime) {
+ if ((System.currentTimeMillis() - serverStats.getIsolatedTime()) <=
settings.minIsolationTime) {
return false;
}
serverStats.markIsolated(false);
@@ -178,7 +179,7 @@ public class IsolationDiscoveryFilter implements
DiscoveryFilter {
if (settings.continuousFailureThreshold > 0) {
// continuousFailureThreshold has higher priority to decide the result
- if (serverStats.getCountinuousFailureCount() >=
settings.continuousFailureThreshold) {
+ if (serverStats.getContinuousFailureCount() >=
settings.continuousFailureThreshold) {
return false;
}
}
diff --git
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/ServerDiscoveryFilter.java
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/ServerDiscoveryFilter.java
index 4bbdc2c..9e6b22e 100644
---
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/ServerDiscoveryFilter.java
+++
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/ServerDiscoveryFilter.java
@@ -17,12 +17,14 @@
package org.apache.servicecomb.loadbalance.filter;
+import org.apache.servicecomb.core.Invocation;
import org.apache.servicecomb.core.SCBEngine;
import org.apache.servicecomb.core.Transport;
import org.apache.servicecomb.core.registry.discovery.EndpointDiscoveryFilter;
import org.apache.servicecomb.loadbalance.ServiceCombServer;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
import org.apache.servicecomb.registry.cache.CacheEndpoint;
+import org.apache.servicecomb.registry.discovery.DiscoveryContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -30,13 +32,14 @@ public class ServerDiscoveryFilter extends
EndpointDiscoveryFilter {
private static final Logger LOGGER =
LoggerFactory.getLogger(ServerDiscoveryFilter.class);
@Override
- protected Object createEndpoint(String transportName, String endpoint,
MicroserviceInstance instance) {
+ protected Object createEndpoint(DiscoveryContext context, String
transportName, String endpoint,
+ MicroserviceInstance instance) {
Transport transport =
SCBEngine.getInstance().getTransportManager().findTransport(transportName);
if (transport == null) {
LOGGER.info("not deployed transport {}, ignore {}.", transportName,
endpoint);
return null;
}
-
- return new ServiceCombServer(transport, new CacheEndpoint(endpoint,
instance));
+ Invocation invocation = context.getInputParameters();
+ return new ServiceCombServer(invocation.getMicroserviceName(), transport,
new CacheEndpoint(endpoint, instance));
}
}
diff --git
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceCreator.java
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceCreator.java
index 14f219c..dc0489e 100644
---
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceCreator.java
+++
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceCreator.java
@@ -44,12 +44,12 @@ public class TestLoadBalanceCreator {
Endpoint host1 = new Endpoint(transport, "host1");
MicroserviceInstance instance1 = new MicroserviceInstance();
instance1.setInstanceId("instance1");
- ServiceCombServer server = new ServiceCombServer(host1, instance1);
+ ServiceCombServer server = new ServiceCombServer(null, host1, instance1);
Endpoint host2 = new Endpoint(transport, "host2");
MicroserviceInstance instance2 = new MicroserviceInstance();
instance2.setInstanceId("instance2");
- ServiceCombServer server2 = new ServiceCombServer(host2, instance2);
+ ServiceCombServer server2 = new ServiceCombServer(null, host2, instance2);
servers.add(server);
servers.add(server2);
@@ -98,12 +98,12 @@ public class TestLoadBalanceCreator {
Endpoint host1 = new Endpoint(transport, "host1");
MicroserviceInstance instance1 = new MicroserviceInstance();
instance1.setInstanceId("instance1");
- ServiceCombServer server = new ServiceCombServer(host1, instance1);
+ ServiceCombServer server = new ServiceCombServer(null, host1, instance1);
Endpoint host2 = new Endpoint(transport, "host2");
MicroserviceInstance instance2 = new MicroserviceInstance();
instance2.setInstanceId("instance2");
- ServiceCombServer server2 = new ServiceCombServer(host2, instance2);
+ ServiceCombServer server2 = new ServiceCombServer(null, host2, instance2);
servers.add(server);
servers.add(server2);
@@ -150,8 +150,8 @@ public class TestLoadBalanceCreator {
instance1.setInstanceId("ii01");
MicroserviceInstance instance2 = new MicroserviceInstance();
instance2.setInstanceId("ii02");
- ServiceCombServer server = new ServiceCombServer(endpoint1, instance1);
- ServiceCombServer server2 = new ServiceCombServer(endpoint2, instance2);
+ ServiceCombServer server = new ServiceCombServer(null, endpoint1,
instance1);
+ ServiceCombServer server2 = new ServiceCombServer(null, endpoint2,
instance2);
new Expectations() {
{
@@ -203,12 +203,12 @@ public class TestLoadBalanceCreator {
List<ServiceCombServer> servers = new ArrayList<>();
Endpoint host1 = new Endpoint(transport, "host1");
MicroserviceInstance instance1 = new MicroserviceInstance();
- ServiceCombServer server = new ServiceCombServer(host1, instance1);
+ ServiceCombServer server = new ServiceCombServer(null, host1, instance1);
instance1.setInstanceId("instance1");
Endpoint host2 = new Endpoint(transport, "host2");
MicroserviceInstance instance2 = new MicroserviceInstance();
- ServiceCombServer server2 = new ServiceCombServer(host2, instance2);
+ ServiceCombServer server2 = new ServiceCombServer(null, host2, instance2);
instance2.setInstanceId("instance2");
servers.add(server);
diff --git
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java
index 13e57ba..7d0938a 100644
---
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java
+++
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java
@@ -861,7 +861,7 @@ public class TestLoadBalanceHandler2 {
(inv, aysnc) -> {
Assert.assertEquals("rest://127.0.0.1:8080",
inv.getEndpoint().getEndpoint());
Assert.assertTrue(serviceCombServerStats.isIsolated());
- Assert.assertEquals(5,
serviceCombServerStats.getCountinuousFailureCount());
+ Assert.assertEquals(5,
serviceCombServerStats.getContinuousFailureCount());
Assert.assertFalse(ServiceCombServerStats.isolatedServerCanTry());
aysnc.success("OK");
});
@@ -875,7 +875,7 @@ public class TestLoadBalanceHandler2 {
}
Assert.assertEquals("rest://127.0.0.1:8080",
invocation.getEndpoint().getEndpoint());
Assert.assertTrue(serviceCombServerStats.isIsolated());
- Assert.assertEquals(0,
serviceCombServerStats.getCountinuousFailureCount());
+ Assert.assertEquals(0, serviceCombServerStats.getContinuousFailureCount());
Assert.assertTrue(ServiceCombServerStats.isolatedServerCanTry());
}
@@ -906,16 +906,16 @@ public class TestLoadBalanceHandler2 {
(inv, aysnc) -> {
Assert.assertFalse(stats0.isIsolated());
Assert.assertTrue(stats1.isIsolated());
- Assert.assertEquals(5, stats1.getCountinuousFailureCount());
+ Assert.assertEquals(5, stats1.getContinuousFailureCount());
Assert.assertFalse(ServiceCombServerStats.isolatedServerCanTry());
if (counter.value == 0) {
Assert.assertEquals("rest://127.0.0.1:8080",
inv.getEndpoint().getEndpoint());
- Assert.assertEquals(0, stats0.getCountinuousFailureCount());
+ Assert.assertEquals(0, stats0.getContinuousFailureCount());
counter.value++;
aysnc.producerFail(new InvocationException(503, "RETRY", "retry to
next instance"));
} else if (counter.value == 1) {
Assert.assertEquals("rest://127.0.0.1:8081",
inv.getEndpoint().getEndpoint());
- Assert.assertEquals(1, stats0.getCountinuousFailureCount());
+ Assert.assertEquals(1, stats0.getContinuousFailureCount());
counter.value++;
aysnc.success("OK");
} else {
@@ -932,9 +932,9 @@ public class TestLoadBalanceHandler2 {
}
Assert.assertEquals("rest://127.0.0.1:8081",
invocation.getEndpoint().getEndpoint());
Assert.assertFalse(stats0.isIsolated());
- Assert.assertEquals(1, stats0.getCountinuousFailureCount());
+ Assert.assertEquals(1, stats0.getContinuousFailureCount());
Assert.assertTrue(stats1.isIsolated());
- Assert.assertEquals(0, stats1.getCountinuousFailureCount());
+ Assert.assertEquals(0, stats1.getContinuousFailureCount());
Assert.assertTrue(ServiceCombServerStats.isolatedServerCanTry());
}
@@ -959,7 +959,7 @@ public class TestLoadBalanceHandler2 {
private ServiceCombServer createMockedServer(String microserviceInstanceId,
String endpoint) {
MicroserviceInstance microserviceInstance = new MicroserviceInstance();
microserviceInstance.setInstanceId(microserviceInstanceId);
- return new ServiceCombServer(
+ return new ServiceCombServer(null,
new Endpoint(Mockito.mock(Transport.class), endpoint),
microserviceInstance);
}
diff --git
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadbalanceHandler.java
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadbalanceHandler.java
index b1348d3..754c6dd 100644
---
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadbalanceHandler.java
+++
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadbalanceHandler.java
@@ -163,7 +163,7 @@ public class TestLoadbalanceHandler {
MicroserviceInstance instance1 = new MicroserviceInstance();
instance1.setInstanceId("1234");
CacheEndpoint cacheEndpoint = new CacheEndpoint("rest://localhost:8080",
instance1);
- ServiceCombServer server = new ServiceCombServer(restTransport,
cacheEndpoint);
+ ServiceCombServer server = new ServiceCombServer(null, restTransport,
cacheEndpoint);
LoadBalancerStats stats = new LoadBalancerStats("test");
new Expectations(loadBalancer) {
{
@@ -192,7 +192,7 @@ public class TestLoadbalanceHandler {
MicroserviceInstance instance1 = new MicroserviceInstance();
instance1.setInstanceId("1234");
CacheEndpoint cacheEndpoint = new CacheEndpoint("rest://localhost:8080",
instance1);
- ServiceCombServer server = new ServiceCombServer(restTransport,
cacheEndpoint);
+ ServiceCombServer server = new ServiceCombServer(null, restTransport,
cacheEndpoint);
LoadBalancerStats stats = new LoadBalancerStats("test");
new Expectations(loadBalancer) {
{
@@ -221,7 +221,7 @@ public class TestLoadbalanceHandler {
MicroserviceInstance instance1 = new MicroserviceInstance();
instance1.setInstanceId("1234");
CacheEndpoint cacheEndpoint = new CacheEndpoint("rest://localhost:8080",
instance1);
- ServiceCombServer server = new ServiceCombServer(restTransport,
cacheEndpoint);
+ ServiceCombServer server = new ServiceCombServer(null, restTransport,
cacheEndpoint);
LoadBalancerStats stats = new LoadBalancerStats("test");
new Expectations(loadBalancer) {
{
diff --git
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombLoadBalancerStats.java
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombLoadBalancerStats.java
index 1268d18..c539d41 100644
---
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombLoadBalancerStats.java
+++
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombLoadBalancerStats.java
@@ -77,7 +77,7 @@ public class TestServiceCombLoadBalancerStats {
serviceCombLoadBalancerStats.setTimerIntervalInMillis(500);
serviceCombLoadBalancerStats.init();
- ServiceCombServer serviceCombServer = new ServiceCombServer(transport,
+ ServiceCombServer serviceCombServer = new ServiceCombServer(null,
transport,
new CacheEndpoint("rest://localhost:8080", instance));
serviceCombLoadBalancerStats.markSuccess(serviceCombServer);
ServiceCombServerStats stats =
serviceCombLoadBalancerStats.getServiceCombServerStats(serviceCombServer);
@@ -94,16 +94,16 @@ public class TestServiceCombLoadBalancerStats {
long time = System.currentTimeMillis();
MicroserviceInstance instance = new MicroserviceInstance();
instance.setInstanceId("instance1");
- ServiceCombServer serviceCombServer = new ServiceCombServer(transport,
+ ServiceCombServer serviceCombServer = new ServiceCombServer(null,
transport,
new CacheEndpoint("rest://localhost:8080", instance));
ServiceCombLoadBalancerStats.INSTANCE.markFailure(serviceCombServer);
ServiceCombLoadBalancerStats.INSTANCE.markFailure(serviceCombServer);
Assert.assertEquals(
-
ServiceCombLoadBalancerStats.INSTANCE.getServiceCombServerStats(serviceCombServer).getCountinuousFailureCount(),
+
ServiceCombLoadBalancerStats.INSTANCE.getServiceCombServerStats(serviceCombServer).getContinuousFailureCount(),
2);
ServiceCombLoadBalancerStats.INSTANCE.markSuccess(serviceCombServer);
Assert.assertEquals(
-
ServiceCombLoadBalancerStats.INSTANCE.getServiceCombServerStats(serviceCombServer).getCountinuousFailureCount(),
+
ServiceCombLoadBalancerStats.INSTANCE.getServiceCombServerStats(serviceCombServer).getContinuousFailureCount(),
0);
ServiceCombLoadBalancerStats.INSTANCE.markSuccess(serviceCombServer);
Assert
@@ -125,7 +125,7 @@ public class TestServiceCombLoadBalancerStats {
long time = System.currentTimeMillis();
MicroserviceInstance instance = new MicroserviceInstance();
instance.setInstanceId("instance2");
- ServiceCombServer serviceCombServer = new ServiceCombServer(transport,
+ ServiceCombServer serviceCombServer = new ServiceCombServer(null,
transport,
new CacheEndpoint("rest://localhost:8080", instance));
CountDownLatch latch = new CountDownLatch(10);
diff --git
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombServer.java
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombServer.java
index 8e4ce0a..13acd19 100644
---
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombServer.java
+++
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombServer.java
@@ -41,7 +41,7 @@ public class TestServiceCombServer {
public void setUp() {
MicroserviceInstance instance = new MicroserviceInstance();
instance.setInstanceId("123456");
- cs = new ServiceCombServer(transport, new CacheEndpoint("abcd", instance));
+ cs = new ServiceCombServer(null, transport, new CacheEndpoint("abcd",
instance));
}
@Test
@@ -61,12 +61,12 @@ public class TestServiceCombServer {
MicroserviceInstance instance1 = new MicroserviceInstance();
instance1.setInstanceId("1234");
- ServiceCombServer other = new ServiceCombServer(transport, new
CacheEndpoint("1234", instance1));
+ ServiceCombServer other = new ServiceCombServer(null, transport, new
CacheEndpoint("1234", instance1));
Assert.assertFalse(cs.equals(other));
MicroserviceInstance instance2 = new MicroserviceInstance();
instance2.setInstanceId("123456");
- other = new ServiceCombServer(transport, new CacheEndpoint("abcd",
instance2));
+ other = new ServiceCombServer(null, transport, new CacheEndpoint("abcd",
instance2));
Assert.assertTrue(cs.equals(other));
}
diff --git
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombServerStats.java
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombServerStats.java
index 2ea105a..a7aad86 100644
---
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombServerStats.java
+++
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestServiceCombServerStats.java
@@ -43,12 +43,12 @@ public class TestServiceCombServerStats {
@Test
public void testSimpleThread() {
long time = System.currentTimeMillis();
- ServiceCombServerStats stats = new ServiceCombServerStats();
+ ServiceCombServerStats stats = new ServiceCombServerStats(null);
stats.markFailure();
stats.markFailure();
- Assert.assertEquals(2, stats.getCountinuousFailureCount());
+ Assert.assertEquals(2, stats.getContinuousFailureCount());
stats.markSuccess();
- Assert.assertEquals(0, stats.getCountinuousFailureCount());
+ Assert.assertEquals(0, stats.getContinuousFailureCount());
stats.markSuccess();
Assert.assertEquals(4, stats.getTotalRequests());
Assert.assertEquals(50, stats.getFailedRate());
@@ -60,7 +60,7 @@ public class TestServiceCombServerStats {
@Test
public void testMiltiThread() throws Exception {
long time = System.currentTimeMillis();
- ServiceCombServerStats stats = new ServiceCombServerStats();
+ ServiceCombServerStats stats = new ServiceCombServerStats(null);
CountDownLatch latch = new CountDownLatch(10);
for (int i = 0; i < 10; i++) {
new Thread(() -> {
@@ -81,7 +81,7 @@ public class TestServiceCombServerStats {
@Test
public void testTimeWindow() {
- ServiceCombServerStats stats = new ServiceCombServerStats(new
MockClock(new Holder<>(1000L)));
+ ServiceCombServerStats stats = new ServiceCombServerStats(null, new
MockClock(new Holder<>(1000L)));
Assert.assertEquals(1000, stats.getLastVisitTime());
stats.markSuccess();
stats.markFailure();
diff --git
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestSessionSticknessRule.java
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestSessionSticknessRule.java
index 2aefc3c..ad392b6 100644
---
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestSessionSticknessRule.java
+++
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestSessionSticknessRule.java
@@ -50,7 +50,7 @@ public class TestSessionSticknessRule {
MicroserviceInstance instance1 = new MicroserviceInstance();
instance1.setInstanceId("1234");
ServiceCombServer mockedServer =
- new ServiceCombServer(transport, new
CacheEndpoint("rest:127.0.0.1:8889", instance1));
+ new ServiceCombServer(null, transport, new
CacheEndpoint("rest:127.0.0.1:8889", instance1));
Invocation invocation = mock(Invocation.class);
LoadBalancerStats stats = mock(LoadBalancerStats.class);
Mockito.when(mockedLb.getLoadBalancerStats()).thenReturn(stats);
@@ -242,7 +242,7 @@ public class TestSessionSticknessRule {
MicroserviceInstance instance1 = new MicroserviceInstance();
instance1.setInstanceId("1234");
ServiceCombServer mockedServer =
- new ServiceCombServer(transport, new
CacheEndpoint("rest:127.0.0.1:8890", instance1));
+ new ServiceCombServer(null, transport, new
CacheEndpoint("rest:127.0.0.1:8890", instance1));
mockedServer.setAlive(true);
mockedServer.setReadyToServe(true);
mockedServer.setId("mockedServer");
@@ -250,7 +250,7 @@ public class TestSessionSticknessRule {
LoadBalancer lb = new LoadBalancer(rule, "mockedServer");
when(invocation.getLocalContext(LoadbalanceHandler.CONTEXT_KEY_SERVER_LIST)).thenReturn(allServers);
rule.setLoadBalancer(lb);
- ServiceCombServer server = new ServiceCombServer(transport, new
CacheEndpoint("rest:127.0.0.1:8890", instance1));
+ ServiceCombServer server = new ServiceCombServer(null, transport, new
CacheEndpoint("rest:127.0.0.1:8890", instance1));
Deencapsulation.setField(rule, "lastServer", server);
new MockUp<SessionStickinessRule>(rule) {
diff --git
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/IsolationDiscoveryFilterTest.java
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/IsolationDiscoveryFilterTest.java
index 1728161..f2ad8c6 100644
---
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/IsolationDiscoveryFilterTest.java
+++
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/IsolationDiscoveryFilterTest.java
@@ -75,7 +75,8 @@ public class IsolationDiscoveryFilterTest {
String endpoint = "rest://127.0.0.1:" + i;
instance.setEndpoints(Collections.singletonList(endpoint));
data.put(instance.getInstanceId(), instance);
- ServiceCombServer serviceCombServer = new ServiceCombServer(transport,
new CacheEndpoint(endpoint, instance));
+ ServiceCombServer serviceCombServer = new
ServiceCombServer(invocation.getMicroserviceName(), transport,
+ new CacheEndpoint(endpoint, instance));
ServiceCombLoadBalancerStats.INSTANCE.getServiceCombServerStats(serviceCombServer);
}
discoveryTreeNode.data(data);
@@ -214,7 +215,7 @@ public class IsolationDiscoveryFilterTest {
ServiceCombServerStats serviceCombServerStats =
ServiceCombLoadBalancerStats.INSTANCE
.getServiceCombServerStats(server0);
- Deencapsulation.setField(serviceCombServerStats, "lastVisitTime",
+ Deencapsulation.setField(serviceCombServerStats, "isolatedTime",
System.currentTimeMillis() -
Configuration.INSTANCE.getMinIsolationTime(invocation.getMicroserviceName()) -
1);
childNode = filter.discovery(discoveryContext, discoveryTreeNode);
childNodeData = childNode.data();
@@ -230,10 +231,11 @@ public class IsolationDiscoveryFilterTest {
ServiceCombLoadBalancerStats.INSTANCE.markSuccess(server0);
ServiceCombServerStats serviceCombServerStats =
ServiceCombLoadBalancerStats.INSTANCE
.getServiceCombServerStats(server0);
- Deencapsulation.setField(serviceCombServerStats, "lastVisitTime",
- System.currentTimeMillis() -
Configuration.INSTANCE.getMinIsolationTime(invocation.getMicroserviceName()) -
1);
ServiceCombLoadBalancerStats.INSTANCE.markIsolated(server0, true);
+ Deencapsulation.setField(serviceCombServerStats, "isolatedTime",
+ System.currentTimeMillis() -
Configuration.INSTANCE.getMinIsolationTime(invocation.getMicroserviceName()) -
1);
+
DiscoveryTreeNode childNode = filter.discovery(discoveryContext,
discoveryTreeNode);
Map<String, MicroserviceInstance> childNodeData = childNode.data();
Assert.assertThat(childNodeData.keySet(),
Matchers.containsInAnyOrder("i0", "i1", "i2"));
diff --git
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/TestServerDiscoveryFilter.java
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/TestServerDiscoveryFilter.java
index a5e16e0..e0370d0 100644
---
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/TestServerDiscoveryFilter.java
+++
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/TestServerDiscoveryFilter.java
@@ -19,6 +19,7 @@ package org.apache.servicecomb.loadbalance.filter;
import org.apache.servicecomb.config.ConfigUtil;
import org.apache.servicecomb.core.Const;
+import org.apache.servicecomb.core.Invocation;
import org.apache.servicecomb.core.SCBEngine;
import org.apache.servicecomb.core.Transport;
import org.apache.servicecomb.core.bootstrap.SCBBootstrap;
@@ -26,12 +27,14 @@ import
org.apache.servicecomb.core.transport.TransportManager;
import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
import org.apache.servicecomb.loadbalance.ServiceCombServer;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
+import org.apache.servicecomb.registry.discovery.DiscoveryContext;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import mockit.Expectations;
+import mockit.Injectable;
import mockit.Mocked;
public class TestServerDiscoveryFilter {
@@ -66,23 +69,27 @@ public class TestServerDiscoveryFilter {
}
};
- ServiceCombServer server = (ServiceCombServer)
filter.createEndpoint(Const.RESTFUL, null, null);
+ ServiceCombServer server = (ServiceCombServer) filter.createEndpoint(null,
Const.RESTFUL, null, null);
Assert.assertNull(server);
}
@Test
- public void createEndpointNormal() {
+ public void createEndpointNormal(@Injectable DiscoveryContext context,
@Injectable Invocation invocation) {
new Expectations(transportManager) {
{
transportManager.findTransport(anyString);
result = trasport;
+ context.getInputParameters();
+ result = invocation;
+ invocation.getMicroserviceName();
+ result = "test";
}
};
MicroserviceInstance instance = new MicroserviceInstance();
instance.setInstanceId("0000001");
ServiceCombServer server = (ServiceCombServer) filter
- .createEndpoint(Const.RESTFUL, "rest://localhost:8080", instance);
+ .createEndpoint(context, Const.RESTFUL, "rest://localhost:8080",
instance);
Assert.assertSame(instance, server.getInstance());
Assert.assertSame(trasport, server.getEndpoint().getTransport());
Assert.assertEquals("rest://localhost:8080",
server.getEndpoint().getEndpoint());