[
https://issues.apache.org/jira/browse/SCB-780?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16560545#comment-16560545
]
ASF GitHub Bot commented on SCB-780:
------------------------------------
liubao68 closed pull request #839: [SCB-780] sessionstickrule add the judgement
of whether lastServer can be accessed.
URL: https://github.com/apache/incubator-servicecomb-java-chassis/pull/839
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/SessionStickinessRule.java
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/SessionStickinessRule.java
index f41399e65..d589b4d42 100644
---
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/SessionStickinessRule.java
+++
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/SessionStickinessRule.java
@@ -135,9 +135,17 @@ public Server choose(Object key) {
return chooseServerErrorThresholdMet(key);
}
+ if (!isLastServerExists(lastServer)) {
+ return chooseNextServer(key);
+ }
+
return lastServer;
}
+ private boolean isLastServerExists(Server lastServer2) {
+ return this.lb.getReachableServers().contains(lastServer2);
+ }
+
@Override
public void setLoadBalancer(ILoadBalancer lb) {
this.lb = lb;
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 72fd94830..6ebead209 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
@@ -47,7 +47,8 @@ public void testRuleFullOperation() {
Transport transport = mock(Transport.class);
MicroserviceInstance instance1 = new MicroserviceInstance();
instance1.setInstanceId("1234");
- ServiceCombServer mockedServer = new ServiceCombServer(transport, new
CacheEndpoint("rest:127.0.0.1:8889", instance1));
+ ServiceCombServer mockedServer =
+ new ServiceCombServer(transport, new
CacheEndpoint("rest:127.0.0.1:8889", instance1));
Object key = Mockito.mock(Object.class);
LoadBalancerStats stats = mock(LoadBalancerStats.class);
Mockito.when(mockedLb.getLoadBalancerStats()).thenReturn(stats);
@@ -192,6 +193,14 @@ private boolean isErrorThresholdMet() {
}
};
+ new MockUp<SessionStickinessRule>() {
+
+ @Mock
+ private boolean isLastServerExists(Server server) {
+ return true;
+ }
+ };
+
try {
ss.choose(key);
} catch (Exception e) {
@@ -233,4 +242,41 @@ public void testServerWithKey() {
}
Assert.assertTrue(status);
}
+
+ @Test
+ public void testLastServerNotExist() {
+ SessionStickinessRule rule = new SessionStickinessRule();
+
+ Transport transport = mock(Transport.class);
+ MicroserviceInstance instance1 = new MicroserviceInstance();
+ instance1.setInstanceId("1234");
+ ServiceCombServer mockedServer =
+ new ServiceCombServer(transport, new
CacheEndpoint("rest:127.0.0.1:8890", instance1));
+ mockedServer.setAlive(true);
+ mockedServer.setReadyToServe(true);
+ mockedServer.setId("mockedServer");
+ List<Server> allServers = Arrays.asList(mockedServer);
+ LoadBalancer lb = new LoadBalancer(rule, "mockedServer", null);
+ lb.setServerList(allServers);
+
+ rule.setLoadBalancer(lb);
+ Assert.assertEquals(lb, rule.getLoadBalancer());
+ Server server = new Server("test");
+ Deencapsulation.setField(rule, "lastServer", server);
+
+ new MockUp<SessionStickinessRule>(rule) {
+ @Mock
+ private boolean isTimeOut() {
+ return false;
+ }
+
+ @Mock
+ private boolean isErrorThresholdMet() {
+ return false;
+ }
+ };
+ Object key = Mockito.mock(Object.class);
+ Server s = rule.choose(key);
+ Assert.assertEquals(mockedServer, s);
+ }
}
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> sessionstickrule add the judgement of whether lastServer can also be accessed.
> ------------------------------------------------------------------------------
>
> Key: SCB-780
> URL: https://issues.apache.org/jira/browse/SCB-780
> Project: Apache ServiceComb
> Issue Type: Bug
> Components: Java-Chassis
> Reporter: WeiChao
> Assignee: WeiChao
> Priority: Major
> Fix For: java-chassis-1.1.0
>
>
> When the sessionstick is in force, if the instance is isolated, the instance
> is still accessed.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)