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
|
@CheckForNull
|
||||||
private final ChannelTracer channelTracer;
|
private final ChannelTracer channelTracer;
|
||||||
private final Channelz channelz;
|
private final Channelz channelz;
|
||||||
|
private Boolean zeroBackends; // a flag for doing channel tracing when flipped
|
||||||
|
|
||||||
// One instance per channel.
|
// One instance per channel.
|
||||||
private final ChannelBufferMeter channelBufferUsed = new ChannelBufferMeter();
|
private final ChannelBufferMeter channelBufferUsed = new ChannelBufferMeter();
|
||||||
|
|
@ -1249,12 +1250,13 @@ final class ManagedChannelImpl extends ManagedChannel implements Instrumented<Ch
|
||||||
new Object[]{getLogId(), servers, config});
|
new Object[]{getLogId(), servers, config});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (channelTracer != null) {
|
if (channelTracer != null && (zeroBackends == null || zeroBackends)) {
|
||||||
channelTracer.reportEvent(new ChannelTrace.Event.Builder()
|
channelTracer.reportEvent(new ChannelTrace.Event.Builder()
|
||||||
.setDescription("Address resolved: " + servers)
|
.setDescription("Address resolved: " + servers)
|
||||||
.setSeverity(ChannelTrace.Event.Severity.CT_INFO)
|
.setSeverity(ChannelTrace.Event.Severity.CT_INFO)
|
||||||
.setTimestampNanos(timeProvider.currentTimeNanos())
|
.setTimestampNanos(timeProvider.currentTimeNanos())
|
||||||
.build());
|
.build());
|
||||||
|
zeroBackends = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
final class NamesResolved implements Runnable {
|
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");
|
checkArgument(!error.isOk(), "the error status must not be OK");
|
||||||
logger.log(Level.WARNING, "[{0}] Failed to resolve name. status={1}",
|
logger.log(Level.WARNING, "[{0}] Failed to resolve name. status={1}",
|
||||||
new Object[] {getLogId(), error});
|
new Object[] {getLogId(), error});
|
||||||
if (channelTracer != null) {
|
if (channelTracer != null && (zeroBackends == null || !zeroBackends)) {
|
||||||
channelTracer.reportEvent(new ChannelTrace.Event.Builder()
|
channelTracer.reportEvent(new ChannelTrace.Event.Builder()
|
||||||
.setDescription("Failed to resolve name")
|
.setDescription("Failed to resolve name")
|
||||||
.setSeverity(ChannelTrace.Event.Severity.CT_WARNING)
|
.setSeverity(ChannelTrace.Event.Severity.CT_WARNING)
|
||||||
.setTimestampNanos(timeProvider.currentTimeNanos())
|
.setTimestampNanos(timeProvider.currentTimeNanos())
|
||||||
.build());
|
.build());
|
||||||
|
zeroBackends = true;
|
||||||
}
|
}
|
||||||
channelExecutor
|
channelExecutor
|
||||||
.executeLater(
|
.executeLater(
|
||||||
|
|
|
||||||
|
|
@ -2182,6 +2182,40 @@ public class ManagedChannelImplTest {
|
||||||
.build());
|
.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
|
@Test
|
||||||
public void channelTracing_stateChangeEvent() throws Exception {
|
public void channelTracing_stateChangeEvent() throws Exception {
|
||||||
channelBuilder.maxTraceEvents(10);
|
channelBuilder.maxTraceEvents(10);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue