mirror of https://github.com/grpc/grpc-java.git
core,netty,okhttp,testing: separate local vs remote stream start times for channelz (#4194)
The channelz spec states that the two must be separate.
This commit is contained in:
parent
f0eb6d2102
commit
921b668ad5
|
|
@ -223,6 +223,7 @@ public abstract class AbstractServerStream extends AbstractStream
|
||||||
@Override
|
@Override
|
||||||
public final void onStreamAllocated() {
|
public final void onStreamAllocated() {
|
||||||
super.onStreamAllocated();
|
super.onStreamAllocated();
|
||||||
|
getTransportTracer().reportRemoteStreamStarted();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -235,7 +235,6 @@ public abstract class AbstractStream implements Stream {
|
||||||
allocated = true;
|
allocated = true;
|
||||||
}
|
}
|
||||||
notifyIfReady();
|
notifyIfReady();
|
||||||
transportTracer.reportStreamStarted();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -295,7 +295,8 @@ public final class Channelz {
|
||||||
@Immutable
|
@Immutable
|
||||||
public static final class TransportStats {
|
public static final class TransportStats {
|
||||||
public final long streamsStarted;
|
public final long streamsStarted;
|
||||||
public final long lastStreamCreatedTimeNanos;
|
public final long lastLocalStreamCreatedTimeNanos;
|
||||||
|
public final long lastRemoteStreamCreatedTimeNanos;
|
||||||
public final long streamsSucceeded;
|
public final long streamsSucceeded;
|
||||||
public final long streamsFailed;
|
public final long streamsFailed;
|
||||||
public final long messagesSent;
|
public final long messagesSent;
|
||||||
|
|
@ -311,7 +312,8 @@ public final class Channelz {
|
||||||
*/
|
*/
|
||||||
public TransportStats(
|
public TransportStats(
|
||||||
long streamsStarted,
|
long streamsStarted,
|
||||||
long lastStreamCreatedTimeNanos,
|
long lastLocalStreamCreatedTimeNanos,
|
||||||
|
long lastRemoteStreamCreatedTimeNanos,
|
||||||
long streamsSucceeded,
|
long streamsSucceeded,
|
||||||
long streamsFailed,
|
long streamsFailed,
|
||||||
long messagesSent,
|
long messagesSent,
|
||||||
|
|
@ -322,7 +324,8 @@ public final class Channelz {
|
||||||
long localFlowControlWindow,
|
long localFlowControlWindow,
|
||||||
long remoteFlowControlWindow) {
|
long remoteFlowControlWindow) {
|
||||||
this.streamsStarted = streamsStarted;
|
this.streamsStarted = streamsStarted;
|
||||||
this.lastStreamCreatedTimeNanos = lastStreamCreatedTimeNanos;
|
this.lastLocalStreamCreatedTimeNanos = lastLocalStreamCreatedTimeNanos;
|
||||||
|
this.lastRemoteStreamCreatedTimeNanos = lastRemoteStreamCreatedTimeNanos;
|
||||||
this.streamsSucceeded = streamsSucceeded;
|
this.streamsSucceeded = streamsSucceeded;
|
||||||
this.streamsFailed = streamsFailed;
|
this.streamsFailed = streamsFailed;
|
||||||
this.messagesSent = messagesSent;
|
this.messagesSent = messagesSent;
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,8 @@ public final class TransportTracer {
|
||||||
|
|
||||||
private final TimeProvider timeProvider;
|
private final TimeProvider timeProvider;
|
||||||
private long streamsStarted;
|
private long streamsStarted;
|
||||||
private long lastStreamCreatedTimeNanos;
|
private long lastLocalStreamCreatedTimeNanos;
|
||||||
|
private long lastRemoteStreamCreatedTimeNanos;
|
||||||
private long streamsSucceeded;
|
private long streamsSucceeded;
|
||||||
private long streamsFailed;
|
private long streamsFailed;
|
||||||
private long keepAlivesSent;
|
private long keepAlivesSent;
|
||||||
|
|
@ -66,7 +67,8 @@ public final class TransportTracer {
|
||||||
flowControlWindowReader == null ? -1 : flowControlWindowReader.read().remoteBytes;
|
flowControlWindowReader == null ? -1 : flowControlWindowReader.read().remoteBytes;
|
||||||
return new TransportStats(
|
return new TransportStats(
|
||||||
streamsStarted,
|
streamsStarted,
|
||||||
lastStreamCreatedTimeNanos,
|
lastLocalStreamCreatedTimeNanos,
|
||||||
|
lastRemoteStreamCreatedTimeNanos,
|
||||||
streamsSucceeded,
|
streamsSucceeded,
|
||||||
streamsFailed,
|
streamsFailed,
|
||||||
messagesSent,
|
messagesSent,
|
||||||
|
|
@ -79,12 +81,19 @@ public final class TransportTracer {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called by the transport to report a stream has started. For clients, this happens when a header
|
* Called by the client to report a stream has started.
|
||||||
* is sent. For servers, this happens when a header is received.
|
|
||||||
*/
|
*/
|
||||||
public void reportStreamStarted() {
|
public void reportLocalStreamStarted() {
|
||||||
streamsStarted++;
|
streamsStarted++;
|
||||||
lastStreamCreatedTimeNanos = currentTimeNanos();
|
lastLocalStreamCreatedTimeNanos = currentTimeNanos();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by the server to report a stream has started.
|
||||||
|
*/
|
||||||
|
public void reportRemoteStreamStarted() {
|
||||||
|
streamsStarted++;
|
||||||
|
lastRemoteStreamCreatedTimeNanos = currentTimeNanos();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -248,6 +248,7 @@ class NettyClientStream extends AbstractClientStream {
|
||||||
// Now that the stream has actually been initialized, call the listener's onReady callback if
|
// Now that the stream has actually been initialized, call the listener's onReady callback if
|
||||||
// appropriate.
|
// appropriate.
|
||||||
onStreamAllocated();
|
onStreamAllocated();
|
||||||
|
getTransportTracer().reportLocalStreamStarted();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -242,6 +242,7 @@ class OkHttpClientStream extends AbstractClientStream {
|
||||||
@Override
|
@Override
|
||||||
protected void onStreamAllocated() {
|
protected void onStreamAllocated() {
|
||||||
super.onStreamAllocated();
|
super.onStreamAllocated();
|
||||||
|
getTransportTracer().reportLocalStreamStarted();
|
||||||
}
|
}
|
||||||
|
|
||||||
@GuardedBy("lock")
|
@GuardedBy("lock")
|
||||||
|
|
|
||||||
|
|
@ -1409,10 +1409,10 @@ public abstract class AbstractTransportTest {
|
||||||
{
|
{
|
||||||
TransportStats serverBefore = getTransportStats(serverTransportListener.transport);
|
TransportStats serverBefore = getTransportStats(serverTransportListener.transport);
|
||||||
assertEquals(0, serverBefore.streamsStarted);
|
assertEquals(0, serverBefore.streamsStarted);
|
||||||
assertEquals(0, serverBefore.lastStreamCreatedTimeNanos);
|
assertEquals(0, serverBefore.lastRemoteStreamCreatedTimeNanos);
|
||||||
TransportStats clientBefore = getTransportStats(client);
|
TransportStats clientBefore = getTransportStats(client);
|
||||||
assertEquals(0, clientBefore.streamsStarted);
|
assertEquals(0, clientBefore.streamsStarted);
|
||||||
assertEquals(0, clientBefore.lastStreamCreatedTimeNanos);
|
assertEquals(0, clientBefore.lastRemoteStreamCreatedTimeNanos);
|
||||||
|
|
||||||
ClientStream clientStream = client.newStream(methodDescriptor, new Metadata(), callOptions);
|
ClientStream clientStream = client.newStream(methodDescriptor, new Metadata(), callOptions);
|
||||||
ClientStreamListenerBase clientStreamListener = new ClientStreamListenerBase();
|
ClientStreamListenerBase clientStreamListener = new ClientStreamListenerBase();
|
||||||
|
|
@ -1422,14 +1422,14 @@ public abstract class AbstractTransportTest {
|
||||||
|
|
||||||
TransportStats serverAfter = getTransportStats(serverTransportListener.transport);
|
TransportStats serverAfter = getTransportStats(serverTransportListener.transport);
|
||||||
assertEquals(1, serverAfter.streamsStarted);
|
assertEquals(1, serverAfter.streamsStarted);
|
||||||
serverFirstTimestampNanos = serverAfter.lastStreamCreatedTimeNanos;
|
serverFirstTimestampNanos = serverAfter.lastRemoteStreamCreatedTimeNanos;
|
||||||
assertEquals(
|
assertEquals(
|
||||||
currentTimeMillis(),
|
currentTimeMillis(),
|
||||||
TimeUnit.NANOSECONDS.toMillis(serverAfter.lastStreamCreatedTimeNanos));
|
TimeUnit.NANOSECONDS.toMillis(serverAfter.lastRemoteStreamCreatedTimeNanos));
|
||||||
|
|
||||||
TransportStats clientAfter = getTransportStats(client);
|
TransportStats clientAfter = getTransportStats(client);
|
||||||
assertEquals(1, clientAfter.streamsStarted);
|
assertEquals(1, clientAfter.streamsStarted);
|
||||||
clientFirstTimestampNanos = clientAfter.lastStreamCreatedTimeNanos;
|
clientFirstTimestampNanos = clientAfter.lastLocalStreamCreatedTimeNanos;
|
||||||
assertEquals(
|
assertEquals(
|
||||||
currentTimeMillis(),
|
currentTimeMillis(),
|
||||||
TimeUnit.NANOSECONDS.toMillis(clientFirstTimestampNanos));
|
TimeUnit.NANOSECONDS.toMillis(clientFirstTimestampNanos));
|
||||||
|
|
@ -1458,18 +1458,18 @@ public abstract class AbstractTransportTest {
|
||||||
assertEquals(2, serverAfter.streamsStarted);
|
assertEquals(2, serverAfter.streamsStarted);
|
||||||
assertEquals(
|
assertEquals(
|
||||||
TimeUnit.MILLISECONDS.toNanos(elapsedMillis),
|
TimeUnit.MILLISECONDS.toNanos(elapsedMillis),
|
||||||
serverAfter.lastStreamCreatedTimeNanos - serverFirstTimestampNanos);
|
serverAfter.lastRemoteStreamCreatedTimeNanos - serverFirstTimestampNanos);
|
||||||
long serverSecondTimestamp =
|
long serverSecondTimestamp =
|
||||||
TimeUnit.NANOSECONDS.toMillis(serverAfter.lastStreamCreatedTimeNanos);
|
TimeUnit.NANOSECONDS.toMillis(serverAfter.lastRemoteStreamCreatedTimeNanos);
|
||||||
assertEquals(currentTimeMillis(), serverSecondTimestamp);
|
assertEquals(currentTimeMillis(), serverSecondTimestamp);
|
||||||
|
|
||||||
TransportStats clientAfter = getTransportStats(client);
|
TransportStats clientAfter = getTransportStats(client);
|
||||||
assertEquals(2, clientAfter.streamsStarted);
|
assertEquals(2, clientAfter.streamsStarted);
|
||||||
assertEquals(
|
assertEquals(
|
||||||
TimeUnit.MILLISECONDS.toNanos(elapsedMillis),
|
TimeUnit.MILLISECONDS.toNanos(elapsedMillis),
|
||||||
clientAfter.lastStreamCreatedTimeNanos - clientFirstTimestampNanos);
|
clientAfter.lastLocalStreamCreatedTimeNanos - clientFirstTimestampNanos);
|
||||||
long clientSecondTimestamp =
|
long clientSecondTimestamp =
|
||||||
TimeUnit.NANOSECONDS.toMillis(clientAfter.lastStreamCreatedTimeNanos);
|
TimeUnit.NANOSECONDS.toMillis(clientAfter.lastLocalStreamCreatedTimeNanos);
|
||||||
assertEquals(currentTimeMillis(), clientSecondTimestamp);
|
assertEquals(currentTimeMillis(), clientSecondTimestamp);
|
||||||
|
|
||||||
ServerStream serverStream = serverStreamCreation.stream;
|
ServerStream serverStream = serverStreamCreation.stream;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue