mirror of https://github.com/grpc/grpc-java.git
core: standardize logid format and add details for channelz
This commit is contained in:
parent
94fefdda12
commit
1bf8476cd7
|
|
@ -132,7 +132,7 @@ public class ChannelzBenchmark {
|
||||||
|
|
||||||
private static <T> InternalInstrumented<T> create() {
|
private static <T> InternalInstrumented<T> create() {
|
||||||
return new InternalInstrumented<T>() {
|
return new InternalInstrumented<T>() {
|
||||||
final InternalLogId id = InternalLogId.allocate("fake-tag");
|
final InternalLogId id = InternalLogId.allocate(getClass(), "fake-tag");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ListenableFuture<T> getStats() {
|
public ListenableFuture<T> getStats() {
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,11 @@
|
||||||
|
|
||||||
package io.grpc;
|
package io.grpc;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An internal class. Do not use.
|
* An internal class. Do not use.
|
||||||
|
|
@ -25,38 +29,79 @@ import java.util.concurrent.atomic.AtomicLong;
|
||||||
*/
|
*/
|
||||||
@Internal
|
@Internal
|
||||||
public final class InternalLogId {
|
public final class InternalLogId {
|
||||||
|
|
||||||
private static final AtomicLong idAlloc = new AtomicLong();
|
private static final AtomicLong idAlloc = new AtomicLong();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param tag a loggable tag associated with this tag. The ID that is allocated is guaranteed
|
* @param type the "Type" to be used when logging this id. The short name of this class will be
|
||||||
* to be unique and increasing, irrespective of the tag.
|
* used, or else a default if the class is anonymous.
|
||||||
|
* @param details a short, human readable string that describes the object the id is attached to.
|
||||||
|
* Typically this will be an address or target.
|
||||||
*/
|
*/
|
||||||
public static InternalLogId allocate(String tag) {
|
public static InternalLogId allocate(Class<?> type, @Nullable String details) {
|
||||||
return new InternalLogId(tag, getNextId());
|
return allocate(getClassName(type), details);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param typeName the "Type" to be used when logging this id.
|
||||||
|
* @param details a short, human readable string that describes the object the id is attached to.
|
||||||
|
* Typically this will be an address or target.
|
||||||
|
*/
|
||||||
|
public static InternalLogId allocate(String typeName, @Nullable String details) {
|
||||||
|
return new InternalLogId(typeName, details, getNextId());
|
||||||
}
|
}
|
||||||
|
|
||||||
static long getNextId() {
|
static long getNextId() {
|
||||||
return idAlloc.incrementAndGet();
|
return idAlloc.incrementAndGet();
|
||||||
}
|
}
|
||||||
|
|
||||||
private final String tag;
|
private final String typeName;
|
||||||
|
private final @Nullable String details;
|
||||||
private final long id;
|
private final long id;
|
||||||
|
|
||||||
protected InternalLogId(String tag, long id) {
|
InternalLogId(String typeName, String details, long id) {
|
||||||
this.tag = tag;
|
checkNotNull(typeName, "typeName");
|
||||||
|
checkArgument(!typeName.isEmpty(), "empty type");
|
||||||
|
this.typeName = typeName;
|
||||||
|
this.details = details;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getTypeName() {
|
||||||
|
return typeName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public String getDetails() {
|
||||||
|
return details;
|
||||||
|
}
|
||||||
|
|
||||||
public long getId() {
|
public long getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTag() {
|
|
||||||
return tag;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return tag + "-" + id;
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append(shortName());
|
||||||
|
if (details != null) {
|
||||||
|
sb.append(": (");
|
||||||
|
sb.append(details);
|
||||||
|
sb.append(')');
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getClassName(Class<?> type) {
|
||||||
|
String className = checkNotNull(type, "type").getSimpleName();
|
||||||
|
if (!className.isEmpty()) {
|
||||||
|
return className;
|
||||||
|
}
|
||||||
|
// + 1 removes the separating '.'
|
||||||
|
return type.getName().substring(type.getPackage().getName().length() + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String shortName() {
|
||||||
|
return typeName + "<" + id + ">";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ import javax.annotation.concurrent.ThreadSafe;
|
||||||
final class InProcessTransport implements ServerTransport, ConnectionClientTransport {
|
final class InProcessTransport implements ServerTransport, ConnectionClientTransport {
|
||||||
private static final Logger log = Logger.getLogger(InProcessTransport.class.getName());
|
private static final Logger log = Logger.getLogger(InProcessTransport.class.getName());
|
||||||
|
|
||||||
private final InternalLogId logId = InternalLogId.allocate(getClass().getName());
|
private final InternalLogId logId;
|
||||||
private final String name;
|
private final String name;
|
||||||
private final int clientMaxInboundMetadataSize;
|
private final int clientMaxInboundMetadataSize;
|
||||||
private final String authority;
|
private final String authority;
|
||||||
|
|
@ -117,6 +117,7 @@ final class InProcessTransport implements ServerTransport, ConnectionClientTrans
|
||||||
this.clientMaxInboundMetadataSize = maxInboundMetadataSize;
|
this.clientMaxInboundMetadataSize = maxInboundMetadataSize;
|
||||||
this.authority = authority;
|
this.authority = authority;
|
||||||
this.userAgent = GrpcUtil.getGrpcUserAgent("inprocess", userAgent);
|
this.userAgent = GrpcUtil.getGrpcUserAgent("inprocess", userAgent);
|
||||||
|
logId = InternalLogId.allocate(getClass(), name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@CheckReturnValue
|
@CheckReturnValue
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,9 @@ import javax.annotation.concurrent.GuardedBy;
|
||||||
* thus the delayed transport stops owning the stream.
|
* thus the delayed transport stops owning the stream.
|
||||||
*/
|
*/
|
||||||
final class DelayedClientTransport implements ManagedClientTransport {
|
final class DelayedClientTransport implements ManagedClientTransport {
|
||||||
private final InternalLogId lodId = InternalLogId.allocate(getClass().getName());
|
// lazily allocated, since it is infrequently used.
|
||||||
|
private final InternalLogId logId =
|
||||||
|
InternalLogId.allocate(DelayedClientTransport.class, /*details=*/ null);
|
||||||
|
|
||||||
private final Object lock = new Object();
|
private final Object lock = new Object();
|
||||||
|
|
||||||
|
|
@ -338,10 +340,9 @@ final class DelayedClientTransport implements ManagedClientTransport {
|
||||||
syncContext.drain();
|
syncContext.drain();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(carl-mastrangelo): remove this once the Subchannel change is in.
|
|
||||||
@Override
|
@Override
|
||||||
public InternalLogId getLogId() {
|
public InternalLogId getLogId() {
|
||||||
return lodId;
|
return logId;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class PendingStream extends DelayedStream {
|
private class PendingStream extends DelayedStream {
|
||||||
|
|
|
||||||
|
|
@ -183,7 +183,7 @@ final class InternalSubchannel implements InternalInstrumented<ChannelStats> {
|
||||||
this.channelz = channelz;
|
this.channelz = channelz;
|
||||||
this.callsTracer = callsTracer;
|
this.callsTracer = callsTracer;
|
||||||
this.channelTracer = Preconditions.checkNotNull(channelTracer, "channelTracer");
|
this.channelTracer = Preconditions.checkNotNull(channelTracer, "channelTracer");
|
||||||
this.logId = Preconditions.checkNotNull(logId, "logId");
|
this.logId = InternalLogId.allocate("Subchannel", authority);
|
||||||
this.channelLogger = new ChannelLoggerImpl(channelTracer, timeProvider);
|
this.channelLogger = new ChannelLoggerImpl(channelTracer, timeProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,7 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
||||||
static final Status SUBCHANNEL_SHUTDOWN_STATUS =
|
static final Status SUBCHANNEL_SHUTDOWN_STATUS =
|
||||||
Status.UNAVAILABLE.withDescription("Subchannel shutdown invoked");
|
Status.UNAVAILABLE.withDescription("Subchannel shutdown invoked");
|
||||||
|
|
||||||
private final InternalLogId logId = InternalLogId.allocate(getClass().getName());
|
private final InternalLogId logId;
|
||||||
private final String target;
|
private final String target;
|
||||||
private final NameResolver.Factory nameResolverFactory;
|
private final NameResolver.Factory nameResolverFactory;
|
||||||
private final Attributes nameResolverParams;
|
private final Attributes nameResolverParams;
|
||||||
|
|
@ -532,6 +532,7 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
||||||
List<ClientInterceptor> interceptors,
|
List<ClientInterceptor> interceptors,
|
||||||
final TimeProvider timeProvider) {
|
final TimeProvider timeProvider) {
|
||||||
this.target = checkNotNull(builder.target, "target");
|
this.target = checkNotNull(builder.target, "target");
|
||||||
|
this.logId = InternalLogId.allocate("Channel", target);
|
||||||
this.nameResolverFactory = builder.getNameResolverFactory();
|
this.nameResolverFactory = builder.getNameResolverFactory();
|
||||||
this.nameResolverParams = checkNotNull(builder.getNameResolverParams(), "nameResolverParams");
|
this.nameResolverParams = checkNotNull(builder.getNameResolverParams(), "nameResolverParams");
|
||||||
this.nameResolver = getNameResolver(target, nameResolverFactory, nameResolverParams);
|
this.nameResolver = getNameResolver(target, nameResolverFactory, nameResolverParams);
|
||||||
|
|
@ -1010,7 +1011,7 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
||||||
checkState(!terminated, "Channel is terminated");
|
checkState(!terminated, "Channel is terminated");
|
||||||
final SubchannelImpl subchannel = new SubchannelImpl(attrs);
|
final SubchannelImpl subchannel = new SubchannelImpl(attrs);
|
||||||
long subchannelCreationTime = timeProvider.currentTimeNanos();
|
long subchannelCreationTime = timeProvider.currentTimeNanos();
|
||||||
InternalLogId subchannelLogId = InternalLogId.allocate("Subchannel");
|
InternalLogId subchannelLogId = InternalLogId.allocate("Subchannel", /*details=*/ null);
|
||||||
ChannelTracer subchannelTracer =
|
ChannelTracer subchannelTracer =
|
||||||
new ChannelTracer(
|
new ChannelTracer(
|
||||||
subchannelLogId, maxTraceEvents, subchannelCreationTime,
|
subchannelLogId, maxTraceEvents, subchannelCreationTime,
|
||||||
|
|
@ -1141,8 +1142,8 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
||||||
// TODO(ejona): can we be even stricter? Like terminating?
|
// TODO(ejona): can we be even stricter? Like terminating?
|
||||||
checkState(!terminated, "Channel is terminated");
|
checkState(!terminated, "Channel is terminated");
|
||||||
long oobChannelCreationTime = timeProvider.currentTimeNanos();
|
long oobChannelCreationTime = timeProvider.currentTimeNanos();
|
||||||
InternalLogId oobLogId = InternalLogId.allocate("OobChannel");
|
InternalLogId oobLogId = InternalLogId.allocate("OobChannel", /*details=*/ null);
|
||||||
InternalLogId subchannelLogId = InternalLogId.allocate("Subchannel-OOB");
|
InternalLogId subchannelLogId = InternalLogId.allocate("Subchannel-OOB", /*details=*/ null);
|
||||||
ChannelTracer oobChannelTracer =
|
ChannelTracer oobChannelTracer =
|
||||||
new ChannelTracer(
|
new ChannelTracer(
|
||||||
oobLogId, maxTraceEvents, oobChannelCreationTime,
|
oobLogId, maxTraceEvents, oobChannelCreationTime,
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ final class OobChannel extends ManagedChannel implements InternalInstrumented<Ch
|
||||||
private AbstractSubchannel subchannelImpl;
|
private AbstractSubchannel subchannelImpl;
|
||||||
private SubchannelPicker subchannelPicker;
|
private SubchannelPicker subchannelPicker;
|
||||||
|
|
||||||
private final InternalLogId logId = InternalLogId.allocate(getClass().getName());
|
private final InternalLogId logId;
|
||||||
private final String authority;
|
private final String authority;
|
||||||
private final DelayedClientTransport delayedTransport;
|
private final DelayedClientTransport delayedTransport;
|
||||||
private final InternalChannelz channelz;
|
private final InternalChannelz channelz;
|
||||||
|
|
@ -104,6 +104,7 @@ final class OobChannel extends ManagedChannel implements InternalInstrumented<Ch
|
||||||
CallTracer callsTracer, ChannelTracer channelTracer, InternalChannelz channelz,
|
CallTracer callsTracer, ChannelTracer channelTracer, InternalChannelz channelz,
|
||||||
TimeProvider timeProvider) {
|
TimeProvider timeProvider) {
|
||||||
this.authority = checkNotNull(authority, "authority");
|
this.authority = checkNotNull(authority, "authority");
|
||||||
|
this.logId = InternalLogId.allocate(getClass(), authority);
|
||||||
this.executorPool = checkNotNull(executorPool, "executorPool");
|
this.executorPool = checkNotNull(executorPool, "executorPool");
|
||||||
this.executor = checkNotNull(executorPool.getObject(), "executor");
|
this.executor = checkNotNull(executorPool.getObject(), "executor");
|
||||||
this.deadlineCancellationExecutor = checkNotNull(
|
this.deadlineCancellationExecutor = checkNotNull(
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ public final class ServerImpl extends io.grpc.Server implements InternalInstrume
|
||||||
private static final Logger log = Logger.getLogger(ServerImpl.class.getName());
|
private static final Logger log = Logger.getLogger(ServerImpl.class.getName());
|
||||||
private static final ServerStreamListener NOOP_LISTENER = new NoopListener();
|
private static final ServerStreamListener NOOP_LISTENER = new NoopListener();
|
||||||
|
|
||||||
private final InternalLogId logId = InternalLogId.allocate(getClass().getName());
|
private final InternalLogId logId;
|
||||||
private final ObjectPool<? extends Executor> executorPool;
|
private final ObjectPool<? extends Executor> executorPool;
|
||||||
/** Executor for application processing. Safe to read after {@link #start()}. */
|
/** Executor for application processing. Safe to read after {@link #start()}. */
|
||||||
private Executor executor;
|
private Executor executor;
|
||||||
|
|
@ -133,6 +133,7 @@ public final class ServerImpl extends io.grpc.Server implements InternalInstrume
|
||||||
this.fallbackRegistry =
|
this.fallbackRegistry =
|
||||||
Preconditions.checkNotNull(builder.fallbackRegistry, "fallbackRegistry");
|
Preconditions.checkNotNull(builder.fallbackRegistry, "fallbackRegistry");
|
||||||
this.transportServer = Preconditions.checkNotNull(transportServer, "transportServer");
|
this.transportServer = Preconditions.checkNotNull(transportServer, "transportServer");
|
||||||
|
this.logId = InternalLogId.allocate("Server", String.valueOf(transportServer.getPort()));
|
||||||
// Fork from the passed in context so that it does not propagate cancellation, it only
|
// Fork from the passed in context so that it does not propagate cancellation, it only
|
||||||
// inherits values.
|
// inherits values.
|
||||||
this.rootContext = Preconditions.checkNotNull(rootContext, "rootContext").fork();
|
this.rootContext = Preconditions.checkNotNull(rootContext, "rootContext").fork();
|
||||||
|
|
|
||||||
|
|
@ -303,7 +303,7 @@ public final class InternalChannelzTest {
|
||||||
|
|
||||||
private static <T> InternalInstrumented<T> create() {
|
private static <T> InternalInstrumented<T> create() {
|
||||||
return new InternalInstrumented<T>() {
|
return new InternalInstrumented<T>() {
|
||||||
final InternalLogId id = InternalLogId.allocate("fake-tag");
|
final InternalLogId id = InternalLogId.allocate("fake-type", /*details=*/ null);
|
||||||
@Override
|
@Override
|
||||||
public ListenableFuture<T> getStats() {
|
public ListenableFuture<T> getStats() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2018 The gRPC Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.grpc;
|
||||||
|
|
||||||
|
import com.google.common.truth.Truth;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.junit.runners.JUnit4;
|
||||||
|
|
||||||
|
@RunWith(JUnit4.class)
|
||||||
|
public class InternalLogIdTest {
|
||||||
|
|
||||||
|
private static final String NO_DETAILS = null;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shortName() {
|
||||||
|
InternalLogId name = InternalLogId.allocate("foo", NO_DETAILS);
|
||||||
|
Truth.assertThat(name.shortName()).matches("foo<\\d+>");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void toString_includesDetails() {
|
||||||
|
InternalLogId name = InternalLogId.allocate("foo", "deets");
|
||||||
|
Truth.assertThat(name.toString()).matches("foo<\\d+>: \\(deets\\)");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shortClassName() {
|
||||||
|
InternalLogId name = InternalLogId.allocate(getClass(), "deets");
|
||||||
|
Truth.assertThat(name.toString()).matches("InternalLogIdTest<\\d+>: \\(deets\\)");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shortAnonymousClassName() {
|
||||||
|
InternalLogId name = InternalLogId.allocate(new Serializable() {}.getClass(), "deets");
|
||||||
|
Truth.assertThat(name.toString()).matches("InternalLogIdTest\\$\\d+<\\d+>: \\(deets\\)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -41,7 +41,7 @@ import org.junit.runners.JUnit4;
|
||||||
public class ChannelLoggerImplTest {
|
public class ChannelLoggerImplTest {
|
||||||
private static final Logger javaLogger = Logger.getLogger(ChannelLogger.class.getName());
|
private static final Logger javaLogger = Logger.getLogger(ChannelLogger.class.getName());
|
||||||
private final FakeClock clock = new FakeClock();
|
private final FakeClock clock = new FakeClock();
|
||||||
private final InternalLogId logId = InternalLogId.allocate("test");
|
private final InternalLogId logId = InternalLogId.allocate("test", /*details=*/ null);
|
||||||
private final String logPrefix = "[" + logId + "] ";
|
private final String logPrefix = "[" + logId + "] ";
|
||||||
private final ArrayList<String> logs = new ArrayList<String>();
|
private final ArrayList<String> logs = new ArrayList<String>();
|
||||||
private final Handler handler = new Handler() {
|
private final Handler handler = new Handler() {
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ public class ChannelTracerTest {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final InternalLogId logId = InternalLogId.allocate("test");
|
private final InternalLogId logId = InternalLogId.allocate("test", /*details=*/ null);
|
||||||
private final String logPrefix = "[" + logId + "] ";
|
private final String logPrefix = "[" + logId + "] ";
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
|
|
|
||||||
|
|
@ -1117,7 +1117,7 @@ public class InternalSubchannelTest {
|
||||||
|
|
||||||
private void createInternalSubchannel(EquivalentAddressGroup ... addrs) {
|
private void createInternalSubchannel(EquivalentAddressGroup ... addrs) {
|
||||||
List<EquivalentAddressGroup> addressGroups = Arrays.asList(addrs);
|
List<EquivalentAddressGroup> addressGroups = Arrays.asList(addrs);
|
||||||
InternalLogId logId = InternalLogId.allocate("Subchannel");
|
InternalLogId logId = InternalLogId.allocate("Subchannel", /*details=*/ null);
|
||||||
internalSubchannel = new InternalSubchannel(addressGroups, AUTHORITY, USER_AGENT,
|
internalSubchannel = new InternalSubchannel(addressGroups, AUTHORITY, USER_AGENT,
|
||||||
mockBackoffPolicyProvider, mockTransportFactory, fakeClock.getScheduledExecutorService(),
|
mockBackoffPolicyProvider, mockTransportFactory, fakeClock.getScheduledExecutorService(),
|
||||||
fakeClock.getStopwatchSupplier(), syncContext, mockInternalSubchannelCallback,
|
fakeClock.getStopwatchSupplier(), syncContext, mockInternalSubchannelCallback,
|
||||||
|
|
|
||||||
|
|
@ -1380,7 +1380,7 @@ public class ServerImplTest {
|
||||||
|
|
||||||
private class SimpleServerTransport implements ServerTransport {
|
private class SimpleServerTransport implements ServerTransport {
|
||||||
ServerTransportListener listener;
|
ServerTransportListener listener;
|
||||||
InternalLogId id = InternalLogId.allocate(getClass().getName());
|
InternalLogId id = InternalLogId.allocate(getClass(), /*details=*/ null);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shutdown() {
|
public void shutdown() {
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,8 @@ final class TestUtils {
|
||||||
@Override
|
@Override
|
||||||
public ConnectionClientTransport answer(InvocationOnMock invocation) throws Throwable {
|
public ConnectionClientTransport answer(InvocationOnMock invocation) throws Throwable {
|
||||||
final ConnectionClientTransport mockTransport = mock(ConnectionClientTransport.class);
|
final ConnectionClientTransport mockTransport = mock(ConnectionClientTransport.class);
|
||||||
when(mockTransport.getLogId()).thenReturn(InternalLogId.allocate("mocktransport"));
|
when(mockTransport.getLogId())
|
||||||
|
.thenReturn(InternalLogId.allocate("mocktransport", /*details=*/ null));
|
||||||
when(mockTransport.newStream(
|
when(mockTransport.newStream(
|
||||||
any(MethodDescriptor.class), any(Metadata.class), any(CallOptions.class)))
|
any(MethodDescriptor.class), any(Metadata.class), any(CallOptions.class)))
|
||||||
.thenReturn(mock(ClientStream.class));
|
.thenReturn(mock(ClientStream.class));
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ import javax.annotation.concurrent.GuardedBy;
|
||||||
* A cronet-based {@link ConnectionClientTransport} implementation.
|
* A cronet-based {@link ConnectionClientTransport} implementation.
|
||||||
*/
|
*/
|
||||||
class CronetClientTransport implements ConnectionClientTransport {
|
class CronetClientTransport implements ConnectionClientTransport {
|
||||||
private final InternalLogId logId = InternalLogId.allocate(getClass().getName());
|
private final InternalLogId logId;
|
||||||
private final InetSocketAddress address;
|
private final InetSocketAddress address;
|
||||||
private final String authority;
|
private final String authority;
|
||||||
private final String userAgent;
|
private final String userAgent;
|
||||||
|
|
@ -87,6 +87,7 @@ class CronetClientTransport implements ConnectionClientTransport {
|
||||||
boolean alwaysUsePut,
|
boolean alwaysUsePut,
|
||||||
TransportTracer transportTracer) {
|
TransportTracer transportTracer) {
|
||||||
this.address = Preconditions.checkNotNull(address, "address");
|
this.address = Preconditions.checkNotNull(address, "address");
|
||||||
|
this.logId = InternalLogId.allocate(getClass(), address.toString());
|
||||||
this.authority = authority;
|
this.authority = authority;
|
||||||
this.userAgent = GrpcUtil.getGrpcUserAgent("cronet", userAgent);
|
this.userAgent = GrpcUtil.getGrpcUserAgent("cronet", userAgent);
|
||||||
this.maxMessageSize = maxMessageSize;
|
this.maxMessageSize = maxMessageSize;
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ import javax.annotation.Nullable;
|
||||||
* or round-robin balancer.
|
* or round-robin balancer.
|
||||||
*/
|
*/
|
||||||
class GrpclbLoadBalancer extends LoadBalancer {
|
class GrpclbLoadBalancer extends LoadBalancer {
|
||||||
|
|
||||||
private final SubchannelPool subchannelPool;
|
private final SubchannelPool subchannelPool;
|
||||||
|
|
||||||
// All mutable states in this class are mutated ONLY from Channel Executor
|
// All mutable states in this class are mutated ONLY from Channel Executor
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ import javax.annotation.Nullable;
|
||||||
* A Netty-based {@link ConnectionClientTransport} implementation.
|
* A Netty-based {@link ConnectionClientTransport} implementation.
|
||||||
*/
|
*/
|
||||||
class NettyClientTransport implements ConnectionClientTransport {
|
class NettyClientTransport implements ConnectionClientTransport {
|
||||||
private final InternalLogId logId = InternalLogId.allocate(getClass().getName());
|
private final InternalLogId logId;
|
||||||
private final Map<ChannelOption<?>, ?> channelOptions;
|
private final Map<ChannelOption<?>, ?> channelOptions;
|
||||||
private final SocketAddress remoteAddress;
|
private final SocketAddress remoteAddress;
|
||||||
private final Class<? extends Channel> channelType;
|
private final Class<? extends Channel> channelType;
|
||||||
|
|
@ -121,6 +121,7 @@ class NettyClientTransport implements ConnectionClientTransport {
|
||||||
this.transportTracer = Preconditions.checkNotNull(transportTracer, "transportTracer");
|
this.transportTracer = Preconditions.checkNotNull(transportTracer, "transportTracer");
|
||||||
this.eagAttributes = Preconditions.checkNotNull(eagAttributes, "eagAttributes");
|
this.eagAttributes = Preconditions.checkNotNull(eagAttributes, "eagAttributes");
|
||||||
this.localSocketPicker = Preconditions.checkNotNull(localSocketPicker, "localSocketPicker");
|
this.localSocketPicker = Preconditions.checkNotNull(localSocketPicker, "localSocketPicker");
|
||||||
|
this.logId = InternalLogId.allocate(getClass(), remoteAddress.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ import javax.annotation.Nullable;
|
||||||
class NettyServer implements InternalServer, InternalWithLogId {
|
class NettyServer implements InternalServer, InternalWithLogId {
|
||||||
private static final Logger log = Logger.getLogger(InternalServer.class.getName());
|
private static final Logger log = Logger.getLogger(InternalServer.class.getName());
|
||||||
|
|
||||||
private final InternalLogId logId = InternalLogId.allocate(getClass().getName());
|
private final InternalLogId logId;
|
||||||
private final SocketAddress address;
|
private final SocketAddress address;
|
||||||
private final Class<? extends ServerChannel> channelType;
|
private final Class<? extends ServerChannel> channelType;
|
||||||
private final Map<ChannelOption<?>, ?> channelOptions;
|
private final Map<ChannelOption<?>, ?> channelOptions;
|
||||||
|
|
@ -133,6 +133,8 @@ class NettyServer implements InternalServer, InternalWithLogId {
|
||||||
this.permitKeepAliveWithoutCalls = permitKeepAliveWithoutCalls;
|
this.permitKeepAliveWithoutCalls = permitKeepAliveWithoutCalls;
|
||||||
this.permitKeepAliveTimeInNanos = permitKeepAliveTimeInNanos;
|
this.permitKeepAliveTimeInNanos = permitKeepAliveTimeInNanos;
|
||||||
this.channelz = Preconditions.checkNotNull(channelz);
|
this.channelz = Preconditions.checkNotNull(channelz);
|
||||||
|
this.logId =
|
||||||
|
InternalLogId.allocate(getClass(), address != null ? address.toString() : "No address");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -343,11 +345,12 @@ class NettyServer implements InternalServer, InternalWithLogId {
|
||||||
* A class that can answer channelz queries about the server listen sockets.
|
* A class that can answer channelz queries about the server listen sockets.
|
||||||
*/
|
*/
|
||||||
private static final class ListenSocket implements InternalInstrumented<SocketStats> {
|
private static final class ListenSocket implements InternalInstrumented<SocketStats> {
|
||||||
private final InternalLogId id = InternalLogId.allocate(getClass().getName());
|
private final InternalLogId id;
|
||||||
private final Channel ch;
|
private final Channel ch;
|
||||||
|
|
||||||
ListenSocket(Channel ch) {
|
ListenSocket(Channel ch) {
|
||||||
this.ch = ch;
|
this.ch = ch;
|
||||||
|
this.id = InternalLogId.allocate(getClass(), String.valueOf(ch.localAddress()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ import io.netty.channel.ChannelPromise;
|
||||||
import io.netty.util.concurrent.Future;
|
import io.netty.util.concurrent.Future;
|
||||||
import io.netty.util.concurrent.GenericFutureListener;
|
import io.netty.util.concurrent.GenericFutureListener;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.SocketAddress;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
@ -56,7 +57,7 @@ class NettyServerTransport implements ServerTransport {
|
||||||
"An existing connection was forcibly closed by the remote host",
|
"An existing connection was forcibly closed by the remote host",
|
||||||
"An established connection was aborted by the software in your host machine");
|
"An established connection was aborted by the software in your host machine");
|
||||||
|
|
||||||
private final InternalLogId logId = InternalLogId.allocate(getClass().getName());
|
private final InternalLogId logId;
|
||||||
private final Channel channel;
|
private final Channel channel;
|
||||||
private final ChannelPromise channelUnused;
|
private final ChannelPromise channelUnused;
|
||||||
private final ProtocolNegotiator protocolNegotiator;
|
private final ProtocolNegotiator protocolNegotiator;
|
||||||
|
|
@ -112,6 +113,8 @@ class NettyServerTransport implements ServerTransport {
|
||||||
this.maxConnectionAgeGraceInNanos = maxConnectionAgeGraceInNanos;
|
this.maxConnectionAgeGraceInNanos = maxConnectionAgeGraceInNanos;
|
||||||
this.permitKeepAliveWithoutCalls = permitKeepAliveWithoutCalls;
|
this.permitKeepAliveWithoutCalls = permitKeepAliveWithoutCalls;
|
||||||
this.permitKeepAliveTimeInNanos = permitKeepAliveTimeInNanos;
|
this.permitKeepAliveTimeInNanos = permitKeepAliveTimeInNanos;
|
||||||
|
SocketAddress remote = channel.remoteAddress();
|
||||||
|
this.logId = InternalLogId.allocate(getClass(), remote != null ? remote.toString() : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start(ServerTransportListener listener) {
|
public void start(ServerTransportListener listener) {
|
||||||
|
|
|
||||||
|
|
@ -147,7 +147,7 @@ class OkHttpClientTransport implements ConnectionClientTransport, TransportExcep
|
||||||
private AsyncFrameWriter frameWriter;
|
private AsyncFrameWriter frameWriter;
|
||||||
private OutboundFlowController outboundFlow;
|
private OutboundFlowController outboundFlow;
|
||||||
private final Object lock = new Object();
|
private final Object lock = new Object();
|
||||||
private final InternalLogId logId = InternalLogId.allocate(getClass().getName());
|
private final InternalLogId logId;
|
||||||
@GuardedBy("lock")
|
@GuardedBy("lock")
|
||||||
private int nextStreamId;
|
private int nextStreamId;
|
||||||
@GuardedBy("lock")
|
@GuardedBy("lock")
|
||||||
|
|
@ -244,6 +244,7 @@ class OkHttpClientTransport implements ConnectionClientTransport, TransportExcep
|
||||||
Preconditions.checkNotNull(tooManyPingsRunnable, "tooManyPingsRunnable");
|
Preconditions.checkNotNull(tooManyPingsRunnable, "tooManyPingsRunnable");
|
||||||
this.maxInboundMetadataSize = maxInboundMetadataSize;
|
this.maxInboundMetadataSize = maxInboundMetadataSize;
|
||||||
this.transportTracer = Preconditions.checkNotNull(transportTracer);
|
this.transportTracer = Preconditions.checkNotNull(transportTracer);
|
||||||
|
this.logId = InternalLogId.allocate(getClass(), address.toString());
|
||||||
initTransportTracer();
|
initTransportTracer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -285,6 +286,7 @@ class OkHttpClientTransport implements ConnectionClientTransport, TransportExcep
|
||||||
Preconditions.checkNotNull(tooManyPingsRunnable, "tooManyPingsRunnable");
|
Preconditions.checkNotNull(tooManyPingsRunnable, "tooManyPingsRunnable");
|
||||||
this.maxInboundMetadataSize = Integer.MAX_VALUE;
|
this.maxInboundMetadataSize = Integer.MAX_VALUE;
|
||||||
this.transportTracer = Preconditions.checkNotNull(transportTracer, "transportTracer");
|
this.transportTracer = Preconditions.checkNotNull(transportTracer, "transportTracer");
|
||||||
|
this.logId = InternalLogId.allocate(getClass(), String.valueOf(socket.getInetAddress()));
|
||||||
initTransportTracer();
|
initTransportTracer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ import java.util.Collections;
|
||||||
final class ChannelzTestHelper {
|
final class ChannelzTestHelper {
|
||||||
|
|
||||||
static final class TestSocket implements InternalInstrumented<SocketStats> {
|
static final class TestSocket implements InternalInstrumented<SocketStats> {
|
||||||
private final InternalLogId id = InternalLogId.allocate("socket");
|
private final InternalLogId id = InternalLogId.allocate("socket", /*details=*/ null);
|
||||||
TransportStats transportStats = new TransportStats(
|
TransportStats transportStats = new TransportStats(
|
||||||
/*streamsStarted=*/ 1,
|
/*streamsStarted=*/ 1,
|
||||||
/*lastLocalStreamCreatedTimeNanos=*/ 2,
|
/*lastLocalStreamCreatedTimeNanos=*/ 2,
|
||||||
|
|
@ -88,7 +88,7 @@ final class ChannelzTestHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
static final class TestListenSocket implements InternalInstrumented<SocketStats> {
|
static final class TestListenSocket implements InternalInstrumented<SocketStats> {
|
||||||
private final InternalLogId id = InternalLogId.allocate("listensocket");
|
private final InternalLogId id = InternalLogId.allocate("listensocket", /*details=*/ null);
|
||||||
SocketAddress listenAddress = new InetSocketAddress("10.0.0.1", 1234);
|
SocketAddress listenAddress = new InetSocketAddress("10.0.0.1", 1234);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -118,7 +118,7 @@ final class ChannelzTestHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
static final class TestServer implements InternalInstrumented<ServerStats> {
|
static final class TestServer implements InternalInstrumented<ServerStats> {
|
||||||
private final InternalLogId id = InternalLogId.allocate("server");
|
private final InternalLogId id = InternalLogId.allocate("server", /*details=*/ null);
|
||||||
ServerStats serverStats = new ServerStats(
|
ServerStats serverStats = new ServerStats(
|
||||||
/*callsStarted=*/ 1,
|
/*callsStarted=*/ 1,
|
||||||
/*callsSucceeded=*/ 2,
|
/*callsSucceeded=*/ 2,
|
||||||
|
|
@ -147,7 +147,8 @@ final class ChannelzTestHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
static final class TestChannel implements InternalInstrumented<ChannelStats> {
|
static final class TestChannel implements InternalInstrumented<ChannelStats> {
|
||||||
private final InternalLogId id = InternalLogId.allocate("channel-or-subchannel");
|
private final InternalLogId id =
|
||||||
|
InternalLogId.allocate("channel-or-subchannel", /*details=*/ null);
|
||||||
|
|
||||||
ChannelStats stats = new ChannelStats.Builder()
|
ChannelStats stats = new ChannelStats.Builder()
|
||||||
.setTarget("sometarget")
|
.setTarget("sometarget")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue