Skip to content

Commit a8de9f0

Browse files
committed
xds: Implement equals in RingHashConfig
Lack of equals causes cluster_resolver to consider every update a different configuration and restart itself. b/430347751
1 parent 9d191b3 commit a8de9f0

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

xds/src/main/java/io/grpc/xds/RingHashLoadBalancer.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import java.util.HashSet;
5252
import java.util.List;
5353
import java.util.Map;
54+
import java.util.Objects;
5455
import java.util.Set;
5556
import java.util.stream.Collectors;
5657
import javax.annotation.Nullable;
@@ -523,6 +524,22 @@ static final class RingHashConfig {
523524
this.requestHashHeader = requestHashHeader;
524525
}
525526

527+
@Override
528+
public boolean equals(Object o) {
529+
if (!(o instanceof RingHashConfig)) {
530+
return false;
531+
}
532+
RingHashConfig that = (RingHashConfig) o;
533+
return this.minRingSize == that.minRingSize
534+
&& this.maxRingSize == that.maxRingSize
535+
&& Objects.equals(this.requestHashHeader, that.requestHashHeader);
536+
}
537+
538+
@Override
539+
public int hashCode() {
540+
return Objects.hash(minRingSize, maxRingSize, requestHashHeader);
541+
}
542+
526543
@Override
527544
public String toString() {
528545
return MoreObjects.toStringHelper(this)

xds/src/test/java/io/grpc/xds/RingHashLoadBalancerTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242

4343
import com.google.common.collect.Iterables;
4444
import com.google.common.primitives.UnsignedInteger;
45+
import com.google.common.testing.EqualsTester;
4546
import io.grpc.Attributes;
4647
import io.grpc.CallOptions;
4748
import io.grpc.ConnectivityState;
@@ -1113,6 +1114,19 @@ protected Helper delegate() {
11131114
assertThat(picks).containsExactly(subchannel1);
11141115
}
11151116

1117+
@Test
1118+
public void config_equalsTester() {
1119+
new EqualsTester()
1120+
.addEqualityGroup(
1121+
new RingHashConfig(1, 2, "headerA"),
1122+
new RingHashConfig(1, 2, "headerA"))
1123+
.addEqualityGroup(new RingHashConfig(1, 1, "headerA"))
1124+
.addEqualityGroup(new RingHashConfig(2, 2, "headerA"))
1125+
.addEqualityGroup(new RingHashConfig(1, 2, "headerB"))
1126+
.addEqualityGroup(new RingHashConfig(1, 2, ""))
1127+
.testEquals();
1128+
}
1129+
11161130
private List<Subchannel> initializeLbSubchannels(RingHashConfig config,
11171131
List<EquivalentAddressGroup> servers, InitializationFlags... initFlags) {
11181132

0 commit comments

Comments
 (0)