mirror of https://github.com/grpc/grpc-java.git
core: channel tracing log only when number of backends changed between zeor and nonzero
This is to implement one of changes made in the spec https://github.com/grpc/proposal/pull/89/files
This commit is contained in:
parent
877b1a198f
commit
e1865b565d
|
|
@ -211,6 +211,7 @@ final class ManagedChannelImpl extends ManagedChannel implements Instrumented<Ch
|
|||
@CheckForNull
|
||||
private final ChannelTracer channelTracer;
|
||||
private final Channelz channelz;
|
||||
private Boolean zeroBackends; // a flag for doing channel tracing when flipped
|
||||
|
||||
// One instance per channel.
|
||||
private final ChannelBufferMeter channelBufferUsed = new ChannelBufferMeter();
|
||||
|
|
@ -1249,12 +1250,13 @@ final class ManagedChannelImpl extends ManagedChannel implements Instrumented<Ch
|
|||
new Object[]{getLogId(), servers, config});
|
||||
}
|
||||
|
||||
if (channelTracer != null) {
|
||||
if (channelTracer != null && (zeroBackends == null || zeroBackends)) {
|
||||
channelTracer.reportEvent(new ChannelTrace.Event.Builder()
|
||||
.setDescription("Address resolved: " + servers)
|
||||
.setSeverity(ChannelTrace.Event.Severity.CT_INFO)
|
||||
.setTimestampNanos(timeProvider.currentTimeNanos())
|
||||
.build());
|
||||
zeroBackends = false;
|
||||
}
|
||||
|
||||
final class NamesResolved implements Runnable {
|
||||
|
|
@ -1295,12 +1297,13 @@ final class ManagedChannelImpl extends ManagedChannel implements Instrumented<Ch
|
|||
checkArgument(!error.isOk(), "the error status must not be OK");
|
||||
logger.log(Level.WARNING, "[{0}] Failed to resolve name. status={1}",
|
||||
new Object[] {getLogId(), error});
|
||||
if (channelTracer != null) {
|
||||
if (channelTracer != null && (zeroBackends == null || !zeroBackends)) {
|
||||
channelTracer.reportEvent(new ChannelTrace.Event.Builder()
|
||||
.setDescription("Failed to resolve name")
|
||||
.setSeverity(ChannelTrace.Event.Severity.CT_WARNING)
|
||||
.setTimestampNanos(timeProvider.currentTimeNanos())
|
||||
.build());
|
||||
zeroBackends = true;
|
||||
}
|
||||
channelExecutor
|
||||
.executeLater(
|
||||
|
|
|
|||
|
|
@ -2182,6 +2182,40 @@ public class ManagedChannelImplTest {
|
|||
.build());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void channelTracing_nameResolvedEvent_zeorAndNonzeroBackends() throws Exception {
|
||||
timer.forwardNanos(1234);
|
||||
channelBuilder.maxTraceEvents(10);
|
||||
List<EquivalentAddressGroup> servers = new ArrayList<EquivalentAddressGroup>();
|
||||
servers.add(new EquivalentAddressGroup(socketAddress));
|
||||
FakeNameResolverFactory nameResolverFactory =
|
||||
new FakeNameResolverFactory.Builder(expectedUri).setServers(servers).build();
|
||||
channelBuilder.nameResolverFactory(nameResolverFactory);
|
||||
createChannel();
|
||||
|
||||
int prevSize = getStats(channel).channelTrace.events.size();
|
||||
nameResolverFactory.resolvers.get(0).listener.onAddresses(
|
||||
Collections.singletonList(new EquivalentAddressGroup(
|
||||
Arrays.asList(new SocketAddress() {}, new SocketAddress() {}))),
|
||||
Attributes.EMPTY);
|
||||
assertThat(getStats(channel).channelTrace.events).hasSize(prevSize);
|
||||
|
||||
prevSize = getStats(channel).channelTrace.events.size();
|
||||
nameResolverFactory.resolvers.get(0).listener.onError(Status.INTERNAL);
|
||||
assertThat(getStats(channel).channelTrace.events).hasSize(prevSize + 1);
|
||||
|
||||
prevSize = getStats(channel).channelTrace.events.size();
|
||||
nameResolverFactory.resolvers.get(0).listener.onError(Status.INTERNAL);
|
||||
assertThat(getStats(channel).channelTrace.events).hasSize(prevSize);
|
||||
|
||||
prevSize = getStats(channel).channelTrace.events.size();
|
||||
nameResolverFactory.resolvers.get(0).listener.onAddresses(
|
||||
Collections.singletonList(new EquivalentAddressGroup(
|
||||
Arrays.asList(new SocketAddress() {}, new SocketAddress() {}))),
|
||||
Attributes.EMPTY);
|
||||
assertThat(getStats(channel).channelTrace.events).hasSize(prevSize + 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void channelTracing_stateChangeEvent() throws Exception {
|
||||
channelBuilder.maxTraceEvents(10);
|
||||
|
|
|
|||
Loading…
Reference in New Issue