Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 29 additions & 6 deletions xds/src/main/java/io/grpc/xds/XdsClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package io.grpc.xds;

import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;

import com.google.common.annotations.VisibleForTesting;
Expand Down Expand Up @@ -117,7 +118,8 @@ private LdsUpdate(long httpMaxStreamDurationNano, @Nullable String rdsName,
@Nullable List<VirtualHost> virtualHosts) {
this.httpMaxStreamDurationNano = httpMaxStreamDurationNano;
this.rdsName = rdsName;
this.virtualHosts = virtualHosts;
this.virtualHosts = virtualHosts == null
? null : Collections.unmodifiableList(new ArrayList<>(virtualHosts));
}

long getHttpMaxStreamDurationNano() {
Expand Down Expand Up @@ -169,7 +171,7 @@ static Builder newBuilder() {
return new Builder();
}

private static class Builder {
static class Builder {
private long httpMaxStreamDurationNano;
@Nullable
private String rdsName;
Expand All @@ -189,8 +191,11 @@ Builder setRdsName(String rdsName) {
return this;
}

Builder setVirtualHosts(List<VirtualHost> virtualHosts) {
this.virtualHosts = virtualHosts;
Builder addVirtualHost(VirtualHost virtualHost) {
if (virtualHosts == null) {
virtualHosts = new ArrayList<>();
}
virtualHosts.add(virtualHost);
return this;
}

Expand All @@ -206,7 +211,8 @@ static final class RdsUpdate implements ResourceUpdate {
private final List<VirtualHost> virtualHosts;

private RdsUpdate(List<VirtualHost> virtualHosts) {
this.virtualHosts = virtualHosts;
this.virtualHosts = Collections.unmodifiableList(
new ArrayList<>(checkNotNull(virtualHosts, "virtualHosts")));
}

static RdsUpdate fromVirtualHosts(List<VirtualHost> virtualHosts) {
Expand All @@ -223,6 +229,23 @@ public String toString() {
.add("virtualHosts", virtualHosts)
.toString();
}

@Override
public int hashCode() {
return Objects.hash(virtualHosts);
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
RdsUpdate that = (RdsUpdate) o;
return Objects.equals(virtualHosts, that.virtualHosts);
}
}

static final class CdsUpdate implements ResourceUpdate {
Expand Down Expand Up @@ -474,7 +497,7 @@ EdsUpdate build() {
* Updates via resource discovery RPCs using LDS. Includes {@link Listener} object containing
* config for security, RBAC or other server side features such as rate limit.
*/
static final class ListenerUpdate {
static final class ListenerUpdate implements ResourceUpdate {
// TODO(sanjaypujare): flatten structure by moving Listener class members here.
private final Listener listener;

Expand Down
Loading