2222import java .util .Arrays ;
2323import java .util .Collections ;
2424import java .util .List ;
25- import java .util .regex .Matcher ;
26- import java .util .regex .Pattern ;
2725import java .util .stream .Stream ;
2826
2927import io .grpc .Attributes ;
@@ -42,16 +40,12 @@ class StaticEtcdNameResolverFactory extends NameResolver.Factory {
4240
4341 protected static final NameResolver .Factory DNS_PROVIDER = new DnsNameResolverProvider ();
4442
45- // (not intended to be strict hostname validation here)
46- protected static final Pattern ADDR_PATT =
47- Pattern .compile ("(?:https?://)?([a-zA-Z0-9\\ -.]+)(?::(\\ d+))?" );
48-
4943 static class SubResolver {
5044 final NameResolver resolver ;
5145 List <EquivalentAddressGroup > eagList = Collections .emptyList ();
5246
53- public SubResolver (URI uri , NameResolver .Helper helper ) {
54- this .resolver = DNS_PROVIDER .newNameResolver (uri , helper );
47+ public SubResolver (URI uri , NameResolver .Args args ) {
48+ this .resolver = DNS_PROVIDER .newNameResolver (uri , args );
5549 }
5650
5751 void updateEagList (List <EquivalentAddressGroup > servers , boolean ownAuthority ) {
@@ -79,34 +73,23 @@ public StaticEtcdNameResolverFactory(List<String> endpoints, String overrideAuth
7973 throw new IllegalArgumentException ("endpoints" );
8074 }
8175 this .overrideAuthority = overrideAuthority ;
82- int count = endpoints .size ();
83- uris = new URI [count ];
84- for (int i = 0 ; i < count ; i ++) {
85- String endpoint = endpoints .get (i ).trim ();
86- Matcher m = ADDR_PATT .matcher (endpoint );
87- if (!m .matches ()) {
88- throw new IllegalArgumentException ("invalid endpoint: " + endpoint );
89- }
90- String portStr = m .group (2 );
91- if (portStr == null ) {
92- portStr = String .valueOf (EtcdClient .DEFAULT_PORT );
93- }
94- uris [i ] = URI .create ("dns:///" + m .group (1 ) + ":" + portStr );
95- }
96- if (count > 1 ) {
76+ uris = endpoints .stream ()
77+ .map (ep -> URI .create (EtcdClient .endpointToUriString (ep )))
78+ .toArray (URI []::new );
79+ if (uris .length > 1 ) {
9780 Collections .shuffle (Arrays .asList (uris ));
9881 }
9982 }
10083
10184 @ Override
102- public NameResolver newNameResolver (URI targetUri , NameResolver .Helper helper ) {
85+ public NameResolver newNameResolver (URI targetUri , NameResolver .Args args ) {
10386 if (!ETCD .equals (targetUri .getScheme ())) {
10487 return null ;
10588 }
10689 if (uris .length == 1 ) {
107- return new SubResolver (uris [0 ], helper ).resolver ;
90+ return new SubResolver (uris [0 ], args ).resolver ;
10891 }
109- SubResolver [] resolvers = createSubResolvers (helper );
92+ SubResolver [] resolvers = createSubResolvers (args );
11093 return new NameResolver () {
11194 int currentCount = 0 ;
11295 @ Override
@@ -157,11 +140,11 @@ public void shutdown() {
157140 };
158141 }
159142
160- private SubResolver [] createSubResolvers (NameResolver .Helper helper ) {
143+ private SubResolver [] createSubResolvers (NameResolver .Args args ) {
161144 int count = uris .length ;
162145 SubResolver [] resolvers = new SubResolver [count ];
163146 for (int i = 0 ; i < count ; i ++) {
164- resolvers [i ] = new SubResolver (uris [i ], helper );
147+ resolvers [i ] = new SubResolver (uris [i ], args );
165148 }
166149 return resolvers ;
167150 }
0 commit comments