20
20
import static com .google .common .base .Preconditions .checkNotNull ;
21
21
22
22
import com .google .common .base .MoreObjects ;
23
+ import com .google .common .base .MoreObjects .ToStringHelper ;
23
24
import com .google .common .base .Objects ;
24
25
import com .google .errorprone .annotations .InlineMe ;
25
26
import java .lang .annotation .Documented ;
26
27
import java .lang .annotation .Retention ;
27
28
import java .lang .annotation .RetentionPolicy ;
28
29
import java .net .URI ;
29
- import java .util .ArrayList ;
30
30
import java .util .Collections ;
31
31
import java .util .List ;
32
32
import java .util .Map ;
@@ -95,7 +95,8 @@ public void onError(Status error) {
95
95
96
96
@ Override
97
97
public void onResult (ResolutionResult resolutionResult ) {
98
- listener .onAddresses (resolutionResult .getAddresses (), resolutionResult .getAttributes ());
98
+ listener .onAddresses (resolutionResult .getAddressesOrError ().getValue (),
99
+ resolutionResult .getAttributes ());
99
100
}
100
101
});
101
102
}
@@ -218,19 +219,21 @@ public abstract static class Listener2 implements Listener {
218
219
@ Override
219
220
@ Deprecated
220
221
@ InlineMe (
221
- replacement = "this.onResult (ResolutionResult.newBuilder().setAddresses(servers) "
222
- + ".setAttributes(attributes).build())" ,
223
- imports = "io.grpc.NameResolver.ResolutionResult" )
222
+ replacement = "this.onResult2 (ResolutionResult.newBuilder().setAddressesOrError( "
223
+ + "StatusOr.fromValue(servers)) .setAttributes(attributes).build())" ,
224
+ imports = { "io.grpc.NameResolver.ResolutionResult" , "io.grpc.StatusOr" } )
224
225
public final void onAddresses (
225
226
List <EquivalentAddressGroup > servers , @ ResolutionResultAttr Attributes attributes ) {
226
227
// TODO(jihuncho) need to promote Listener2 if we want to use ConfigOrError
227
- onResult (
228
- ResolutionResult .newBuilder ().setAddresses (servers ).setAttributes (attributes ).build ());
228
+ onResult2 (
229
+ ResolutionResult .newBuilder ().setAddressesOrError (
230
+ StatusOr .fromValue (servers )).setAttributes (attributes ).build ());
229
231
}
230
232
231
233
/**
232
234
* Handles updates on resolved addresses and attributes. If
233
- * {@link ResolutionResult#getAddresses()} is empty, {@link #onError(Status)} will be called.
235
+ * {@link ResolutionResult#getAddressesOrError()} is empty, {@link #onError(Status)} will be
236
+ * called.
234
237
*
235
238
* @param resolutionResult the resolved server addresses, attributes, and Service Config.
236
239
* @since 1.21.0
@@ -584,17 +587,17 @@ public abstract static class ServiceConfigParser {
584
587
*/
585
588
@ ExperimentalApi ("https://github.com/grpc/grpc-java/issues/1770" )
586
589
public static final class ResolutionResult {
587
- private final List <EquivalentAddressGroup > addresses ;
590
+ private final StatusOr < List <EquivalentAddressGroup >> addressesOrError ;
588
591
@ ResolutionResultAttr
589
592
private final Attributes attributes ;
590
593
@ Nullable
591
594
private final ConfigOrError serviceConfig ;
592
595
593
596
ResolutionResult (
594
- List <EquivalentAddressGroup > addresses ,
597
+ StatusOr < List <EquivalentAddressGroup >> addressesOrError ,
595
598
@ ResolutionResultAttr Attributes attributes ,
596
599
ConfigOrError serviceConfig ) {
597
- this .addresses = Collections . unmodifiableList ( new ArrayList <>( addresses )) ;
600
+ this .addressesOrError = addressesOrError ;
598
601
this .attributes = checkNotNull (attributes , "attributes" );
599
602
this .serviceConfig = serviceConfig ;
600
603
}
@@ -615,7 +618,7 @@ public static Builder newBuilder() {
615
618
*/
616
619
public Builder toBuilder () {
617
620
return newBuilder ()
618
- .setAddresses ( addresses )
621
+ .setAddressesOrError ( addressesOrError )
619
622
.setAttributes (attributes )
620
623
.setServiceConfig (serviceConfig );
621
624
}
@@ -624,9 +627,20 @@ public Builder toBuilder() {
624
627
* Gets the addresses resolved by name resolution.
625
628
*
626
629
* @since 1.21.0
630
+ * @deprecated Will be superseded by getAddressesOrError
627
631
*/
632
+ @ Deprecated
628
633
public List <EquivalentAddressGroup > getAddresses () {
629
- return addresses ;
634
+ return addressesOrError .getValue ();
635
+ }
636
+
637
+ /**
638
+ * Gets the addresses resolved by name resolution or the error in doing so.
639
+ *
640
+ * @since 1.65.0
641
+ */
642
+ public StatusOr <List <EquivalentAddressGroup >> getAddressesOrError () {
643
+ return addressesOrError ;
630
644
}
631
645
632
646
/**
@@ -652,11 +666,11 @@ public ConfigOrError getServiceConfig() {
652
666
653
667
@ Override
654
668
public String toString () {
655
- return MoreObjects .toStringHelper (this )
656
- .add ("addresses " , addresses )
657
- .add ("attributes" , attributes )
658
- .add ("serviceConfig " , serviceConfig )
659
- .toString ();
669
+ ToStringHelper stringHelper = MoreObjects .toStringHelper (this );
670
+ stringHelper .add ("addressesOrError " , addressesOrError . toString ());
671
+ stringHelper .add ("attributes" , attributes );
672
+ stringHelper .add ("serviceConfigOrError " , serviceConfig );
673
+ return stringHelper .toString ();
660
674
}
661
675
662
676
/**
@@ -668,7 +682,7 @@ public boolean equals(Object obj) {
668
682
return false ;
669
683
}
670
684
ResolutionResult that = (ResolutionResult ) obj ;
671
- return Objects .equal (this .addresses , that .addresses )
685
+ return Objects .equal (this .addressesOrError , that .addressesOrError )
672
686
&& Objects .equal (this .attributes , that .attributes )
673
687
&& Objects .equal (this .serviceConfig , that .serviceConfig );
674
688
}
@@ -678,7 +692,7 @@ public boolean equals(Object obj) {
678
692
*/
679
693
@ Override
680
694
public int hashCode () {
681
- return Objects .hashCode (addresses , attributes , serviceConfig );
695
+ return Objects .hashCode (addressesOrError , attributes , serviceConfig );
682
696
}
683
697
684
698
/**
@@ -688,7 +702,8 @@ public int hashCode() {
688
702
*/
689
703
@ ExperimentalApi ("https://github.com/grpc/grpc-java/issues/1770" )
690
704
public static final class Builder {
691
- private List <EquivalentAddressGroup > addresses = Collections .emptyList ();
705
+ private StatusOr <List <EquivalentAddressGroup >> addresses =
706
+ StatusOr .fromValue (Collections .emptyList ());
692
707
private Attributes attributes = Attributes .EMPTY ;
693
708
@ Nullable
694
709
private ConfigOrError serviceConfig ;
@@ -700,9 +715,21 @@ public static final class Builder {
700
715
* Sets the addresses resolved by name resolution. This field is required.
701
716
*
702
717
* @since 1.21.0
718
+ * @deprecated Will be superseded by setAddressesOrError
703
719
*/
720
+ @ Deprecated
704
721
public Builder setAddresses (List <EquivalentAddressGroup > addresses ) {
705
- this .addresses = addresses ;
722
+ setAddressesOrError (StatusOr .fromValue (addresses ));
723
+ return this ;
724
+ }
725
+
726
+ /**
727
+ * Sets the addresses resolved by name resolution or the error in doing so. This field is
728
+ * required.
729
+ * @param addresses Resolved addresses or an error in resolving addresses
730
+ */
731
+ public Builder setAddressesOrError (StatusOr <List <EquivalentAddressGroup >> addresses ) {
732
+ this .addresses = checkNotNull (addresses , "StatusOr addresses cannot be null." );
706
733
return this ;
707
734
}
708
735
0 commit comments