1616
1717package io .grpc .xds ;
1818
19+ import static com .google .common .base .Preconditions .checkNotNull ;
1920import static com .google .common .base .Preconditions .checkState ;
2021
2122import com .google .common .annotations .VisibleForTesting ;
@@ -117,7 +118,8 @@ private LdsUpdate(long httpMaxStreamDurationNano, @Nullable String rdsName,
117118 @ Nullable List <VirtualHost > virtualHosts ) {
118119 this .httpMaxStreamDurationNano = httpMaxStreamDurationNano ;
119120 this .rdsName = rdsName ;
120- this .virtualHosts = virtualHosts ;
121+ this .virtualHosts = virtualHosts == null
122+ ? null : Collections .unmodifiableList (new ArrayList <>(virtualHosts ));
121123 }
122124
123125 long getHttpMaxStreamDurationNano () {
@@ -169,7 +171,7 @@ static Builder newBuilder() {
169171 return new Builder ();
170172 }
171173
172- private static class Builder {
174+ static class Builder {
173175 private long httpMaxStreamDurationNano ;
174176 @ Nullable
175177 private String rdsName ;
@@ -189,8 +191,11 @@ Builder setRdsName(String rdsName) {
189191 return this ;
190192 }
191193
192- Builder setVirtualHosts (List <VirtualHost > virtualHosts ) {
193- this .virtualHosts = virtualHosts ;
194+ Builder addVirtualHost (VirtualHost virtualHost ) {
195+ if (virtualHosts == null ) {
196+ virtualHosts = new ArrayList <>();
197+ }
198+ virtualHosts .add (virtualHost );
194199 return this ;
195200 }
196201
@@ -206,7 +211,8 @@ static final class RdsUpdate implements ResourceUpdate {
206211 private final List <VirtualHost > virtualHosts ;
207212
208213 private RdsUpdate (List <VirtualHost > virtualHosts ) {
209- this .virtualHosts = virtualHosts ;
214+ this .virtualHosts = Collections .unmodifiableList (
215+ new ArrayList <>(checkNotNull (virtualHosts , "virtualHosts" )));
210216 }
211217
212218 static RdsUpdate fromVirtualHosts (List <VirtualHost > virtualHosts ) {
@@ -223,6 +229,23 @@ public String toString() {
223229 .add ("virtualHosts" , virtualHosts )
224230 .toString ();
225231 }
232+
233+ @ Override
234+ public int hashCode () {
235+ return Objects .hash (virtualHosts );
236+ }
237+
238+ @ Override
239+ public boolean equals (Object o ) {
240+ if (this == o ) {
241+ return true ;
242+ }
243+ if (o == null || getClass () != o .getClass ()) {
244+ return false ;
245+ }
246+ RdsUpdate that = (RdsUpdate ) o ;
247+ return Objects .equals (virtualHosts , that .virtualHosts );
248+ }
226249 }
227250
228251 static final class CdsUpdate implements ResourceUpdate {
@@ -474,7 +497,7 @@ EdsUpdate build() {
474497 * Updates via resource discovery RPCs using LDS. Includes {@link Listener} object containing
475498 * config for security, RBAC or other server side features such as rate limit.
476499 */
477- static final class ListenerUpdate {
500+ static final class ListenerUpdate implements ResourceUpdate {
478501 // TODO(sanjaypujare): flatten structure by moving Listener class members here.
479502 private final Listener listener ;
480503
0 commit comments