Enforces the order of RoundRobinLoadBalancer when positive overflow (#1077)

# Conflicts:
#	spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/RoundRobinLoadBalancer.java
#	spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/core/RoundRobinLoadBalancerTest.java
This commit is contained in:
jizhuozhi
2022-03-07 22:24:43 +08:00
committed by Olga Maciaszek-Sharma
parent d24ab1b7cf
commit 12842c2c7a
2 changed files with 4 additions and 21 deletions

View File

@@ -36,6 +36,7 @@ import org.springframework.cloud.client.loadbalancer.Response;
*
* @author Spencer Gibb
* @author Olga Maciaszek-Sharma
* @author Zhuozhi JI
*/
public class RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalancer {

View File

@@ -26,7 +26,6 @@ import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.support.SimpleObjectProvider;
import static java.lang.Integer.MAX_VALUE;
import static java.lang.Integer.MIN_VALUE;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
@@ -38,22 +37,7 @@ import static org.mockito.Mockito.when;
class RoundRobinLoadBalancerTest {
@Test
void shouldOrderEnforcedWhenPositive() {
assertOrderEnforced(0);
}
@Test
void shouldOrderEnforcedWhenNegative() {
assertOrderEnforced(MIN_VALUE);
}
@Test
void shouldOrderEnforcedWhenPositiveOverflow() {
assertOrderEnforced(MAX_VALUE);
}
@SuppressWarnings("all")
void assertOrderEnforced(int seed) {
void shouldEnforceOrderWhenPositiveOverflow() {
List<ServiceInstance> instances = new ArrayList<>();
for (int i = 0; i < 10; i++) {
ServiceInstance instance = mock(ServiceInstance.class);
@@ -65,13 +49,11 @@ class RoundRobinLoadBalancerTest {
when(supplier.get(any())).thenReturn(Flux.just(instances));
RoundRobinLoadBalancer loadBalancer = new RoundRobinLoadBalancer(new SimpleObjectProvider<>(supplier),
"shouldStartFromZeroWhenPositiveOverflow", seed);
"shouldStartFromZeroWhenPositiveOverflow", MAX_VALUE);
for (int i = 0; i < 10; i++) {
int instanceId = ((seed + 1 + i) & MAX_VALUE) % instances.size();
ServiceInstance chosen = loadBalancer.choose().block().getServer();
assertThat(chosen.getInstanceId()).isEqualTo(instanceId + "");
assertThat(chosen.getInstanceId()).isEqualTo(i + "");
}
}
}