mirror of https://github.com/grpc/grpc-java.git
xds: fix XdsNameResolver blindly propagates XdsClient errors (#8953)
This commit is contained in:
parent
3b9ff362b9
commit
2a455241a7
|
|
@ -722,7 +722,9 @@ final class XdsNameResolver extends NameResolver {
|
||||||
if (stopped || receivedConfig) {
|
if (stopped || receivedConfig) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
listener.onError(error);
|
listener.onError(Status.UNAVAILABLE.withCause(error.getCause()).withDescription(
|
||||||
|
String.format("Unable to load LDS %s. xDS server returned: %s: %s.",
|
||||||
|
ldsResourceName, error.getCode(), error.getDescription())));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -920,7 +922,9 @@ final class XdsNameResolver extends NameResolver {
|
||||||
if (RouteDiscoveryState.this != routeDiscoveryState || receivedConfig) {
|
if (RouteDiscoveryState.this != routeDiscoveryState || receivedConfig) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
listener.onError(error);
|
listener.onError(Status.UNAVAILABLE.withCause(error.getCause()).withDescription(
|
||||||
|
String.format("Unable to load RDS %s. xDS server returned: %s: %s.",
|
||||||
|
resourceName, error.getCode(), error.getDescription())));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -431,7 +431,21 @@ public class XdsNameResolverTest {
|
||||||
verify(mockListener).onError(errorCaptor.capture());
|
verify(mockListener).onError(errorCaptor.capture());
|
||||||
Status error = errorCaptor.getValue();
|
Status error = errorCaptor.getValue();
|
||||||
assertThat(error.getCode()).isEqualTo(Code.UNAVAILABLE);
|
assertThat(error.getCode()).isEqualTo(Code.UNAVAILABLE);
|
||||||
assertThat(error.getDescription()).isEqualTo("server unreachable");
|
assertThat(error.getDescription()).isEqualTo("Unable to load LDS " + AUTHORITY
|
||||||
|
+ ". xDS server returned: UNAVAILABLE: server unreachable.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void resolving_translateErrorLds() {
|
||||||
|
resolver.start(mockListener);
|
||||||
|
FakeXdsClient xdsClient = (FakeXdsClient) resolver.getXdsClient();
|
||||||
|
xdsClient.deliverError(Status.NOT_FOUND.withDescription("server unreachable"));
|
||||||
|
verify(mockListener).onError(errorCaptor.capture());
|
||||||
|
Status error = errorCaptor.getValue();
|
||||||
|
assertThat(error.getCode()).isEqualTo(Code.UNAVAILABLE);
|
||||||
|
assertThat(error.getDescription()).isEqualTo("Unable to load LDS " + AUTHORITY
|
||||||
|
+ ". xDS server returned: NOT_FOUND: server unreachable.");
|
||||||
|
assertThat(error.getCause()).isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -441,10 +455,14 @@ public class XdsNameResolverTest {
|
||||||
xdsClient.deliverLdsUpdateForRdsName(RDS_RESOURCE_NAME);
|
xdsClient.deliverLdsUpdateForRdsName(RDS_RESOURCE_NAME);
|
||||||
xdsClient.deliverError(Status.UNAVAILABLE.withDescription("server unreachable"));
|
xdsClient.deliverError(Status.UNAVAILABLE.withDescription("server unreachable"));
|
||||||
verify(mockListener, times(2)).onError(errorCaptor.capture());
|
verify(mockListener, times(2)).onError(errorCaptor.capture());
|
||||||
for (Status error : errorCaptor.getAllValues()) {
|
Status error = errorCaptor.getAllValues().get(0);
|
||||||
assertThat(error.getCode()).isEqualTo(Code.UNAVAILABLE);
|
assertThat(error.getCode()).isEqualTo(Code.UNAVAILABLE);
|
||||||
assertThat(error.getDescription()).isEqualTo("server unreachable");
|
assertThat(error.getDescription()).isEqualTo("Unable to load LDS " + AUTHORITY
|
||||||
}
|
+ ". xDS server returned: UNAVAILABLE: server unreachable.");
|
||||||
|
error = errorCaptor.getAllValues().get(1);
|
||||||
|
assertThat(error.getCode()).isEqualTo(Code.UNAVAILABLE);
|
||||||
|
assertThat(error.getDescription()).isEqualTo("Unable to load RDS " + RDS_RESOURCE_NAME
|
||||||
|
+ ". xDS server returned: UNAVAILABLE: server unreachable.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue