mirror of https://github.com/grpc/grpc-java.git
xds: Implement equals in RingHashConfig
Lack of equals causes cluster_resolver to consider every update a different configuration and restart itself. b/430347751
This commit is contained in:
parent
9d191b31b5
commit
a8de9f07ab
|
@ -51,6 +51,7 @@ import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
@ -523,6 +524,22 @@ final class RingHashLoadBalancer extends MultiChildLoadBalancer {
|
||||||
this.requestHashHeader = requestHashHeader;
|
this.requestHashHeader = requestHashHeader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (!(o instanceof RingHashConfig)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
RingHashConfig that = (RingHashConfig) o;
|
||||||
|
return this.minRingSize == that.minRingSize
|
||||||
|
&& this.maxRingSize == that.maxRingSize
|
||||||
|
&& Objects.equals(this.requestHashHeader, that.requestHashHeader);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(minRingSize, maxRingSize, requestHashHeader);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return MoreObjects.toStringHelper(this)
|
return MoreObjects.toStringHelper(this)
|
||||||
|
|
|
@ -42,6 +42,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||||
|
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.primitives.UnsignedInteger;
|
import com.google.common.primitives.UnsignedInteger;
|
||||||
|
import com.google.common.testing.EqualsTester;
|
||||||
import io.grpc.Attributes;
|
import io.grpc.Attributes;
|
||||||
import io.grpc.CallOptions;
|
import io.grpc.CallOptions;
|
||||||
import io.grpc.ConnectivityState;
|
import io.grpc.ConnectivityState;
|
||||||
|
@ -1113,6 +1114,19 @@ public class RingHashLoadBalancerTest {
|
||||||
assertThat(picks).containsExactly(subchannel1);
|
assertThat(picks).containsExactly(subchannel1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void config_equalsTester() {
|
||||||
|
new EqualsTester()
|
||||||
|
.addEqualityGroup(
|
||||||
|
new RingHashConfig(1, 2, "headerA"),
|
||||||
|
new RingHashConfig(1, 2, "headerA"))
|
||||||
|
.addEqualityGroup(new RingHashConfig(1, 1, "headerA"))
|
||||||
|
.addEqualityGroup(new RingHashConfig(2, 2, "headerA"))
|
||||||
|
.addEqualityGroup(new RingHashConfig(1, 2, "headerB"))
|
||||||
|
.addEqualityGroup(new RingHashConfig(1, 2, ""))
|
||||||
|
.testEquals();
|
||||||
|
}
|
||||||
|
|
||||||
private List<Subchannel> initializeLbSubchannels(RingHashConfig config,
|
private List<Subchannel> initializeLbSubchannels(RingHashConfig config,
|
||||||
List<EquivalentAddressGroup> servers, InitializationFlags... initFlags) {
|
List<EquivalentAddressGroup> servers, InitializationFlags... initFlags) {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue