diff options
author | ZHANG Dapeng <zdapeng@google.com> | 2018-05-21 12:44:06 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-21 12:44:06 -0700 |
commit | f5f560ad365735a0c9bf8b86abeed16cf7dfdde7 (patch) | |
tree | b0a34ef4d5036958b505cc1a4785ba883a91dfda | |
parent | 30478d88c722a5a25e74f80e43578cb265d0ccfb (diff) | |
download | grpc-grpc-java-f5f560ad365735a0c9bf8b86abeed16cf7dfdde7.tar.gz |
all: TimeProvider to use nanos rather than millis
This is the same practice as #2833
17 files changed, 91 insertions, 131 deletions
diff --git a/core/src/main/java/io/grpc/internal/CallTracer.java b/core/src/main/java/io/grpc/internal/CallTracer.java index 9402ba345..be1779469 100644 --- a/core/src/main/java/io/grpc/internal/CallTracer.java +++ b/core/src/main/java/io/grpc/internal/CallTracer.java @@ -16,7 +16,8 @@ package io.grpc.internal; -import com.google.common.annotations.VisibleForTesting; +import static io.grpc.internal.TimeProvider.SYSTEM_TIME_PROVIDER; + import io.grpc.internal.Channelz.ChannelStats; import io.grpc.internal.Channelz.ServerStats; @@ -28,7 +29,7 @@ final class CallTracer { private final LongCounter callsStarted = LongCounterFactory.create(); private final LongCounter callsSucceeded = LongCounterFactory.create(); private final LongCounter callsFailed = LongCounterFactory.create(); - private volatile long lastCallStartedMillis; + private volatile long lastCallStartedNanos; CallTracer(TimeProvider timeProvider) { this.timeProvider = timeProvider; @@ -36,7 +37,7 @@ final class CallTracer { public void reportCallStarted() { callsStarted.add(1); - lastCallStartedMillis = timeProvider.currentTimeMillis(); + lastCallStartedNanos = timeProvider.currentTimeNanos(); } public void reportCallEnded(boolean success) { @@ -52,7 +53,7 @@ final class CallTracer { .setCallsStarted(callsStarted.value()) .setCallsSucceeded(callsSucceeded.value()) .setCallsFailed(callsFailed.value()) - .setLastCallStartedMillis(lastCallStartedMillis); + .setLastCallStartedNanos(lastCallStartedNanos); } void updateBuilder(ServerStats.Builder builder) { @@ -60,26 +61,13 @@ final class CallTracer { .setCallsStarted(callsStarted.value()) .setCallsSucceeded(callsSucceeded.value()) .setCallsFailed(callsFailed.value()) - .setLastCallStartedMillis(lastCallStartedMillis); - } - - @VisibleForTesting - interface TimeProvider { - /** Returns the current milli time. */ - long currentTimeMillis(); + .setLastCallStartedNanos(lastCallStartedNanos); } public interface Factory { CallTracer create(); } - static final TimeProvider SYSTEM_TIME_PROVIDER = new TimeProvider() { - @Override - public long currentTimeMillis() { - return System.currentTimeMillis(); - } - }; - static final Factory DEFAULT_FACTORY = new Factory() { @Override public CallTracer create() { diff --git a/core/src/main/java/io/grpc/internal/Channelz.java b/core/src/main/java/io/grpc/internal/Channelz.java index 3c993725f..a96c8c094 100644 --- a/core/src/main/java/io/grpc/internal/Channelz.java +++ b/core/src/main/java/io/grpc/internal/Channelz.java @@ -279,7 +279,7 @@ public final class Channelz { public final long callsStarted; public final long callsSucceeded; public final long callsFailed; - public final long lastCallStartedMillis; + public final long lastCallStartedNanos; public final List<Instrumented<SocketStats>> listenSockets; /** @@ -289,12 +289,12 @@ public final class Channelz { long callsStarted, long callsSucceeded, long callsFailed, - long lastCallStartedMillis, + long lastCallStartedNanos, List<Instrumented<SocketStats>> listenSockets) { this.callsStarted = callsStarted; this.callsSucceeded = callsSucceeded; this.callsFailed = callsFailed; - this.lastCallStartedMillis = lastCallStartedMillis; + this.lastCallStartedNanos = lastCallStartedNanos; this.listenSockets = checkNotNull(listenSockets); } @@ -302,7 +302,7 @@ public final class Channelz { private long callsStarted; private long callsSucceeded; private long callsFailed; - private long lastCallStartedMillis; + private long lastCallStartedNanos; public List<Instrumented<SocketStats>> listenSockets = Collections.emptyList(); public Builder setCallsStarted(long callsStarted) { @@ -320,8 +320,8 @@ public final class Channelz { return this; } - public Builder setLastCallStartedMillis(long lastCallStartedMillis) { - this.lastCallStartedMillis = lastCallStartedMillis; + public Builder setLastCallStartedNanos(long lastCallStartedNanos) { + this.lastCallStartedNanos = lastCallStartedNanos; return this; } @@ -341,7 +341,7 @@ public final class Channelz { callsStarted, callsSucceeded, callsFailed, - lastCallStartedMillis, + lastCallStartedNanos, listenSockets); } } @@ -358,7 +358,7 @@ public final class Channelz { public final long callsStarted; public final long callsSucceeded; public final long callsFailed; - public final long lastCallStartedMillis; + public final long lastCallStartedNanos; public final List<WithLogId> subchannels; public final List<WithLogId> sockets; @@ -372,7 +372,7 @@ public final class Channelz { long callsStarted, long callsSucceeded, long callsFailed, - long lastCallStartedMillis, + long lastCallStartedNanos, List<WithLogId> subchannels, List<WithLogId> sockets) { Preconditions.checkState( @@ -385,7 +385,7 @@ public final class Channelz { this.callsStarted = callsStarted; this.callsSucceeded = callsSucceeded; this.callsFailed = callsFailed; - this.lastCallStartedMillis = lastCallStartedMillis; + this.lastCallStartedNanos = lastCallStartedNanos; this.subchannels = checkNotNull(subchannels); this.sockets = checkNotNull(sockets); } @@ -397,7 +397,7 @@ public final class Channelz { private long callsStarted; private long callsSucceeded; private long callsFailed; - private long lastCallStartedMillis; + private long lastCallStartedNanos; private List<WithLogId> subchannels = Collections.emptyList(); private List<WithLogId> sockets = Collections.emptyList(); @@ -431,8 +431,8 @@ public final class Channelz { return this; } - public Builder setLastCallStartedMillis(long lastCallStartedMillis) { - this.lastCallStartedMillis = lastCallStartedMillis; + public Builder setLastCallStartedNanos(long lastCallStartedNanos) { + this.lastCallStartedNanos = lastCallStartedNanos; return this; } @@ -461,7 +461,7 @@ public final class Channelz { callsStarted, callsSucceeded, callsFailed, - lastCallStartedMillis, + lastCallStartedNanos, subchannels, sockets); } diff --git a/grpclb/src/main/java/io/grpc/grpclb/TimeProvider.java b/core/src/main/java/io/grpc/internal/TimeProvider.java index b22d74359..813ad38ad 100644 --- a/grpclb/src/main/java/io/grpc/grpclb/TimeProvider.java +++ b/core/src/main/java/io/grpc/internal/TimeProvider.java @@ -14,11 +14,25 @@ * limitations under the License. */ -package io.grpc.grpclb; +package io.grpc.internal; + +import java.util.concurrent.TimeUnit; /** - * Allow time manipulation in tests. + * Time source representing the current system time in nanos. Used to inject a fake clock + * into unit tests. */ -interface TimeProvider { - long currentTimeMillis(); +public interface TimeProvider { + /** Returns the current nano time. */ + long currentTimeNanos(); + + TimeProvider SYSTEM_TIME_PROVIDER = new TimeProvider() { + final long offsetNanos = + TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis()) - System.nanoTime(); + + @Override + public long currentTimeNanos() { + return System.nanoTime() + offsetNanos; + } + }; } diff --git a/core/src/main/java/io/grpc/internal/TransportTracer.java b/core/src/main/java/io/grpc/internal/TransportTracer.java index 0446956bf..808ce6b96 100644 --- a/core/src/main/java/io/grpc/internal/TransportTracer.java +++ b/core/src/main/java/io/grpc/internal/TransportTracer.java @@ -16,22 +16,17 @@ package io.grpc.internal; +import static io.grpc.internal.TimeProvider.SYSTEM_TIME_PROVIDER; + import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import io.grpc.internal.Channelz.TransportStats; -import java.util.concurrent.TimeUnit; /** * A class for gathering statistics about a transport. This is an experimental feature. * Can only be called from the transport thread unless otherwise noted. */ public final class TransportTracer { - private static final TimeProvider SYSTEM_TIME_PROVIDER = new TimeProvider() { - @Override - public long currentTimeMillis() { - return System.currentTimeMillis(); - } - }; private static final Factory DEFAULT_FACTORY = new Factory(SYSTEM_TIME_PROVIDER); private final TimeProvider timeProvider; @@ -85,7 +80,7 @@ public final class TransportTracer { */ public void reportLocalStreamStarted() { streamsStarted++; - lastLocalStreamCreatedTimeNanos = currentTimeNanos(); + lastLocalStreamCreatedTimeNanos = timeProvider.currentTimeNanos(); } /** @@ -93,7 +88,7 @@ public final class TransportTracer { */ public void reportRemoteStreamStarted() { streamsStarted++; - lastRemoteStreamCreatedTimeNanos = currentTimeNanos(); + lastRemoteStreamCreatedTimeNanos = timeProvider.currentTimeNanos(); } /** @@ -115,7 +110,7 @@ public final class TransportTracer { return; } messagesSent += numMessages; - lastMessageSentTimeNanos = currentTimeNanos(); + lastMessageSentTimeNanos = timeProvider.currentTimeNanos(); } /** @@ -123,7 +118,7 @@ public final class TransportTracer { */ public void reportMessageReceived() { messagesReceived.add(1); - lastMessageReceivedTimeNanos = currentTimeNanos(); + lastMessageReceivedTimeNanos = timeProvider.currentTimeNanos(); } /** @@ -161,20 +156,6 @@ public final class TransportTracer { FlowControlWindows read(); } - private long currentTimeNanos() { - return TimeUnit.MILLISECONDS.toNanos(timeProvider.currentTimeMillis()); - } - - /** - * Time source representing the current system time in millis. Used to inject a fake clock - * into unit tests. - */ - @VisibleForTesting - public interface TimeProvider { - /** Returns the current milli time. */ - long currentTimeMillis(); - } - public static final class Factory { private TimeProvider timeProvider; diff --git a/core/src/test/java/io/grpc/internal/ManagedChannelImplTest.java b/core/src/test/java/io/grpc/internal/ManagedChannelImplTest.java index 9120e309f..3f941d043 100644 --- a/core/src/test/java/io/grpc/internal/ManagedChannelImplTest.java +++ b/core/src/test/java/io/grpc/internal/ManagedChannelImplTest.java @@ -149,10 +149,10 @@ public class ManagedChannelImplTest { private final CallTracer.Factory channelStatsFactory = new CallTracer.Factory() { @Override public CallTracer create() { - return new CallTracer(new CallTracer.TimeProvider() { + return new CallTracer(new TimeProvider() { @Override - public long currentTimeMillis() { - return executor.currentTimeMillis(); + public long currentTimeNanos() { + return executor.getTicker().read(); } }); } @@ -2104,7 +2104,7 @@ public class ManagedChannelImplTest { assertEquals(0, getStats(channel).callsStarted); call.start(mockCallListener, new Metadata()); assertEquals(1, getStats(channel).callsStarted); - assertEquals(executor.currentTimeMillis(), getStats(channel).lastCallStartedMillis); + assertEquals(executor.getTicker().read(), getStats(channel).lastCallStartedNanos); } @Test diff --git a/core/src/test/java/io/grpc/internal/ServerCallImplTest.java b/core/src/test/java/io/grpc/internal/ServerCallImplTest.java index 9e597a7be..57bc4be2f 100644 --- a/core/src/test/java/io/grpc/internal/ServerCallImplTest.java +++ b/core/src/test/java/io/grpc/internal/ServerCallImplTest.java @@ -110,7 +110,7 @@ public class ServerCallImplTest { tracer.updateBuilder(beforeBuilder); ServerStats before = beforeBuilder.build(); assertEquals(0, before.callsStarted); - assertEquals(0, before.lastCallStartedMillis); + assertEquals(0, before.lastCallStartedNanos); call = new ServerCallImpl<Long, Long>(stream, UNARY_METHOD, requestHeaders, context, DecompressorRegistry.getDefaultInstance(), CompressorRegistry.getDefaultInstance(), diff --git a/grpclb/src/main/java/io/grpc/grpclb/GrpclbClientLoadRecorder.java b/grpclb/src/main/java/io/grpc/grpclb/GrpclbClientLoadRecorder.java index a6eadc090..db6a473ba 100644 --- a/grpclb/src/main/java/io/grpc/grpclb/GrpclbClientLoadRecorder.java +++ b/grpclb/src/main/java/io/grpc/grpclb/GrpclbClientLoadRecorder.java @@ -23,6 +23,7 @@ import io.grpc.CallOptions; import io.grpc.ClientStreamTracer; import io.grpc.Metadata; import io.grpc.Status; +import io.grpc.internal.TimeProvider; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -99,7 +100,7 @@ final class GrpclbClientLoadRecorder extends ClientStreamTracer.Factory { ClientStats generateLoadReport() { ClientStats.Builder statsBuilder = ClientStats.newBuilder() - .setTimestamp(Timestamps.fromMillis(time.currentTimeMillis())) + .setTimestamp(Timestamps.fromNanos(time.currentTimeNanos())) .setNumCallsStarted(callsStartedUpdater.getAndSet(this, 0)) .setNumCallsFinished(callsFinishedUpdater.getAndSet(this, 0)) .setNumCallsFinishedWithClientFailedToSend(callsFailedToSendUpdater.getAndSet(this, 0)) diff --git a/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancer.java b/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancer.java index 42bb806b8..5c428960c 100644 --- a/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancer.java +++ b/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancer.java @@ -28,6 +28,7 @@ import io.grpc.grpclb.GrpclbConstants.LbPolicy; import io.grpc.internal.GrpcAttributes; import io.grpc.internal.LogId; import io.grpc.internal.ObjectPool; +import io.grpc.internal.TimeProvider; import io.grpc.internal.WithLogId; import java.util.ArrayList; import java.util.Collections; diff --git a/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancerFactory.java b/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancerFactory.java index 7058ef3e4..4bde1f225 100644 --- a/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancerFactory.java +++ b/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancerFactory.java @@ -21,6 +21,7 @@ import io.grpc.LoadBalancer; import io.grpc.PickFirstBalancerFactory; import io.grpc.internal.GrpcUtil; import io.grpc.internal.SharedResourcePool; +import io.grpc.internal.TimeProvider; import io.grpc.util.RoundRobinLoadBalancerFactory; /** @@ -33,12 +34,6 @@ import io.grpc.util.RoundRobinLoadBalancerFactory; public class GrpclbLoadBalancerFactory extends LoadBalancer.Factory { private static final GrpclbLoadBalancerFactory INSTANCE = new GrpclbLoadBalancerFactory(); - private static final TimeProvider TIME_PROVIDER = new TimeProvider() { - @Override - public long currentTimeMillis() { - return System.currentTimeMillis(); - } - }; private GrpclbLoadBalancerFactory() { } @@ -57,6 +52,6 @@ public class GrpclbLoadBalancerFactory extends LoadBalancer.Factory { // load should not be on the shared scheduled executor, we should use a combination of the // scheduled executor and the default app executor. SharedResourcePool.forResource(GrpcUtil.TIMER_SERVICE), - TIME_PROVIDER); + TimeProvider.SYSTEM_TIME_PROVIDER); } } diff --git a/grpclb/src/main/java/io/grpc/grpclb/GrpclbState.java b/grpclb/src/main/java/io/grpc/grpclb/GrpclbState.java index f09b01f48..606be53df 100644 --- a/grpclb/src/main/java/io/grpc/grpclb/GrpclbState.java +++ b/grpclb/src/main/java/io/grpc/grpclb/GrpclbState.java @@ -43,6 +43,7 @@ import io.grpc.Metadata; import io.grpc.Status; import io.grpc.grpclb.LoadBalanceResponse.LoadBalanceResponseTypeCase; import io.grpc.internal.LogId; +import io.grpc.internal.TimeProvider; import io.grpc.stub.StreamObserver; import java.net.InetAddress; import java.net.InetSocketAddress; diff --git a/grpclb/src/test/java/io/grpc/grpclb/GrpclbLoadBalancerTest.java b/grpclb/src/test/java/io/grpc/grpclb/GrpclbLoadBalancerTest.java index 04ba5d0ec..c952140c6 100644 --- a/grpclb/src/test/java/io/grpc/grpclb/GrpclbLoadBalancerTest.java +++ b/grpclb/src/test/java/io/grpc/grpclb/GrpclbLoadBalancerTest.java @@ -74,6 +74,7 @@ import io.grpc.internal.FakeClock; import io.grpc.internal.GrpcAttributes; import io.grpc.internal.ObjectPool; import io.grpc.internal.SerializingExecutor; +import io.grpc.internal.TimeProvider; import io.grpc.stub.StreamObserver; import java.net.InetSocketAddress; import java.net.SocketAddress; @@ -137,8 +138,8 @@ public class GrpclbLoadBalancerTest { private final ArrayList<String> failingLbAuthorities = new ArrayList<String>(); private final TimeProvider timeProvider = new TimeProvider() { @Override - public long currentTimeMillis() { - return fakeClock.currentTimeMillis(); + public long currentTimeNanos() { + return fakeClock.getTicker().read(); } }; private io.grpc.Server fakeLbServer; @@ -685,7 +686,7 @@ public class GrpclbLoadBalancerTest { eq(LoadBalanceRequest.newBuilder() .setClientStats( ClientStats.newBuilder(expectedReport) - .setTimestamp(Timestamps.fromMillis(fakeClock.currentTimeMillis())) + .setTimestamp(Timestamps.fromNanos(fakeClock.getTicker().read())) .build()) .build())); } diff --git a/netty/src/test/java/io/grpc/netty/NettyTransportTest.java b/netty/src/test/java/io/grpc/netty/NettyTransportTest.java index bcb0aa7f7..3fb2233f9 100644 --- a/netty/src/test/java/io/grpc/netty/NettyTransportTest.java +++ b/netty/src/test/java/io/grpc/netty/NettyTransportTest.java @@ -21,7 +21,6 @@ import io.grpc.internal.ClientTransportFactory; import io.grpc.internal.FakeClock; import io.grpc.internal.InternalServer; import io.grpc.internal.ManagedClientTransport; -import io.grpc.internal.TransportTracer; import io.grpc.internal.testing.AbstractTransportTest; import java.net.InetSocketAddress; import java.util.List; @@ -36,13 +35,6 @@ import org.junit.runners.JUnit4; @RunWith(JUnit4.class) public class NettyTransportTest extends AbstractTransportTest { private final FakeClock fakeClock = new FakeClock(); - private final TransportTracer.Factory fakeClockTransportTracer = new TransportTracer.Factory( - new TransportTracer.TimeProvider() { - @Override - public long currentTimeMillis() { - return fakeClock.currentTimeMillis(); - } - }); // Avoid LocalChannel for testing because LocalChannel can fail with // io.netty.channel.ChannelException instead of java.net.ConnectException which breaks // serverNotListening test. @@ -95,8 +87,8 @@ public class NettyTransportTest extends AbstractTransportTest { } @Override - protected long currentTimeMillis() { - return fakeClock.currentTimeMillis(); + protected long fakeCurrentTimeNanos() { + return fakeClock.getTicker().read(); } @Override diff --git a/okhttp/src/test/java/io/grpc/okhttp/OkHttpTransportTest.java b/okhttp/src/test/java/io/grpc/okhttp/OkHttpTransportTest.java index 7a0178d53..5b5fe91e9 100644 --- a/okhttp/src/test/java/io/grpc/okhttp/OkHttpTransportTest.java +++ b/okhttp/src/test/java/io/grpc/okhttp/OkHttpTransportTest.java @@ -22,7 +22,6 @@ import io.grpc.internal.ClientTransportFactory; import io.grpc.internal.FakeClock; import io.grpc.internal.InternalServer; import io.grpc.internal.ManagedClientTransport; -import io.grpc.internal.TransportTracer; import io.grpc.internal.testing.AbstractTransportTest; import io.grpc.netty.NettyServerBuilder; import java.net.InetSocketAddress; @@ -38,13 +37,6 @@ import org.junit.runners.JUnit4; @RunWith(JUnit4.class) public class OkHttpTransportTest extends AbstractTransportTest { private final FakeClock fakeClock = new FakeClock(); - private final TransportTracer.Factory fakeClockTransportTracer = new TransportTracer.Factory( - new TransportTracer.TimeProvider() { - @Override - public long currentTimeMillis() { - return fakeClock.currentTimeMillis(); - } - }); private ClientTransportFactory clientFactory = OkHttpChannelBuilder // Although specified here, address is ignored because we never call build. .forAddress("localhost", 0) @@ -100,8 +92,8 @@ public class OkHttpTransportTest extends AbstractTransportTest { } @Override - protected long currentTimeMillis() { - return fakeClock.currentTimeMillis(); + protected long fakeCurrentTimeNanos() { + return fakeClock.getTicker().read(); } // TODO(ejona): Flaky/Broken diff --git a/services/src/main/java/io/grpc/services/ChannelzProtoUtil.java b/services/src/main/java/io/grpc/services/ChannelzProtoUtil.java index e28361b2c..203b43621 100644 --- a/services/src/main/java/io/grpc/services/ChannelzProtoUtil.java +++ b/services/src/main/java/io/grpc/services/ChannelzProtoUtil.java @@ -138,7 +138,7 @@ final class ChannelzProtoUtil { .setCallsStarted(stats.callsStarted) .setCallsSucceeded(stats.callsSucceeded) .setCallsFailed(stats.callsFailed) - .setLastCallStartedTimestamp(Timestamps.fromMillis(stats.lastCallStartedMillis)) + .setLastCallStartedTimestamp(Timestamps.fromNanos(stats.lastCallStartedNanos)) .build(); } @@ -359,7 +359,7 @@ final class ChannelzProtoUtil { .setCallsStarted(stats.callsStarted) .setCallsSucceeded(stats.callsSucceeded) .setCallsFailed(stats.callsFailed) - .setLastCallStartedTimestamp(Timestamps.fromMillis(stats.lastCallStartedMillis)); + .setLastCallStartedTimestamp(Timestamps.fromNanos(stats.lastCallStartedNanos)); if (stats.channelTrace != null) { builder.setTrace(toChannelTrace(stats.channelTrace)); } diff --git a/services/src/test/java/io/grpc/services/ChannelzProtoUtilTest.java b/services/src/test/java/io/grpc/services/ChannelzProtoUtilTest.java index 563f83a3f..c6214cabf 100644 --- a/services/src/test/java/io/grpc/services/ChannelzProtoUtilTest.java +++ b/services/src/test/java/io/grpc/services/ChannelzProtoUtilTest.java @@ -106,7 +106,7 @@ public final class ChannelzProtoUtilTest { .setCallsStarted(1) .setCallsSucceeded(2) .setCallsFailed(3) - .setLastCallStartedTimestamp(Timestamps.fromMillis(4)) + .setLastCallStartedTimestamp(Timestamps.fromNanos(4)) .build(); private final Channel channelProto = Channel .newBuilder() @@ -127,7 +127,7 @@ public final class ChannelzProtoUtilTest { .setCallsStarted(1) .setCallsSucceeded(2) .setCallsFailed(3) - .setLastCallStartedTimestamp(Timestamps.fromMillis(4)) + .setLastCallStartedTimestamp(Timestamps.fromNanos(4)) .build(); private final Subchannel subchannelProto = Subchannel .newBuilder() @@ -146,7 +146,7 @@ public final class ChannelzProtoUtilTest { .setCallsStarted(1) .setCallsSucceeded(2) .setCallsFailed(3) - .setLastCallStartedTimestamp(Timestamps.fromMillis(4)) + .setLastCallStartedTimestamp(Timestamps.fromNanos(4)) .build(); private final Server serverProto = Server .newBuilder() @@ -912,7 +912,7 @@ public final class ChannelzProtoUtilTest { .setCallsStarted(stats.callsStarted) .setCallsSucceeded(stats.callsSucceeded) .setCallsFailed(stats.callsFailed) - .setLastCallStartedMillis(stats.lastCallStartedMillis); + .setLastCallStartedNanos(stats.lastCallStartedNanos); if (!stats.subchannels.isEmpty()) { builder.setSubchannels(stats.subchannels); } @@ -938,7 +938,7 @@ public final class ChannelzProtoUtilTest { .setCallsStarted(stats.callsStarted) .setCallsSucceeded(stats.callsSucceeded) .setCallsFailed(stats.callsFailed) - .setLastCallStartedMillis(stats.lastCallStartedMillis) + .setLastCallStartedNanos(stats.lastCallStartedNanos) .setListenSockets(stats.listenSockets); } } diff --git a/services/src/test/java/io/grpc/services/ChannelzTestHelper.java b/services/src/test/java/io/grpc/services/ChannelzTestHelper.java index 0acdd0287..072cb18b7 100644 --- a/services/src/test/java/io/grpc/services/ChannelzTestHelper.java +++ b/services/src/test/java/io/grpc/services/ChannelzTestHelper.java @@ -122,7 +122,7 @@ final class ChannelzTestHelper { /*callsStarted=*/ 1, /*callsSucceeded=*/ 2, /*callsFailed=*/ 3, - /*lastCallStartedMillis=*/ 4, + /*lastCallStartedNanos=*/ 4, Collections.<Instrumented<SocketStats>>emptyList()); @Override @@ -154,7 +154,7 @@ final class ChannelzTestHelper { .setCallsStarted(1) .setCallsSucceeded(2) .setCallsFailed(3) - .setLastCallStartedMillis(4) + .setLastCallStartedNanos(4) .setSubchannels(Collections.<WithLogId>emptyList()) .setSockets(Collections.<WithLogId>emptyList()) .build(); diff --git a/testing/src/main/java/io/grpc/internal/testing/AbstractTransportTest.java b/testing/src/main/java/io/grpc/internal/testing/AbstractTransportTest.java index 042fa304e..6847e7586 100644 --- a/testing/src/main/java/io/grpc/internal/testing/AbstractTransportTest.java +++ b/testing/src/main/java/io/grpc/internal/testing/AbstractTransportTest.java @@ -65,6 +65,8 @@ import io.grpc.internal.ServerStream; import io.grpc.internal.ServerStreamListener; import io.grpc.internal.ServerTransport; import io.grpc.internal.ServerTransportListener; +import io.grpc.internal.TimeProvider; +import io.grpc.internal.TransportTracer; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; @@ -97,6 +99,14 @@ public abstract class AbstractTransportTest { private static final Attributes.Key<String> ADDITIONAL_TRANSPORT_ATTR_KEY = Attributes.Key.create("additional-attr"); + protected final TransportTracer.Factory fakeClockTransportTracer = new TransportTracer.Factory( + new TimeProvider() { + @Override + public long currentTimeNanos() { + return fakeCurrentTimeNanos(); + } + }); + /** * Returns a new server that when started will be able to be connected to from the client. Each * returned instance should be new and yet be accessible by new client transports. @@ -204,7 +214,7 @@ public abstract class AbstractTransportTest { /** * Returns the current time, for tests that rely on the clock. */ - protected long currentTimeMillis() { + protected long fakeCurrentTimeNanos() { throw new UnsupportedOperationException(); } @@ -1435,16 +1445,12 @@ public abstract class AbstractTransportTest { TransportStats serverAfter = getTransportStats(serverTransportListener.transport); assertEquals(1, serverAfter.streamsStarted); serverFirstTimestampNanos = serverAfter.lastRemoteStreamCreatedTimeNanos; - assertEquals( - currentTimeMillis(), - TimeUnit.NANOSECONDS.toMillis(serverAfter.lastRemoteStreamCreatedTimeNanos)); + assertEquals(fakeCurrentTimeNanos(), serverAfter.lastRemoteStreamCreatedTimeNanos); TransportStats clientAfter = getTransportStats(client); assertEquals(1, clientAfter.streamsStarted); clientFirstTimestampNanos = clientAfter.lastLocalStreamCreatedTimeNanos; - assertEquals( - currentTimeMillis(), - TimeUnit.NANOSECONDS.toMillis(clientFirstTimestampNanos)); + assertEquals(fakeCurrentTimeNanos(), clientFirstTimestampNanos); ServerStream serverStream = serverStreamCreation.stream; serverStream.close(Status.OK, new Metadata()); @@ -1471,18 +1477,14 @@ public abstract class AbstractTransportTest { assertEquals( TimeUnit.MILLISECONDS.toNanos(elapsedMillis), serverAfter.lastRemoteStreamCreatedTimeNanos - serverFirstTimestampNanos); - long serverSecondTimestamp = - TimeUnit.NANOSECONDS.toMillis(serverAfter.lastRemoteStreamCreatedTimeNanos); - assertEquals(currentTimeMillis(), serverSecondTimestamp); + assertEquals(fakeCurrentTimeNanos(), serverAfter.lastRemoteStreamCreatedTimeNanos); TransportStats clientAfter = getTransportStats(client); assertEquals(2, clientAfter.streamsStarted); assertEquals( TimeUnit.MILLISECONDS.toNanos(elapsedMillis), clientAfter.lastLocalStreamCreatedTimeNanos - clientFirstTimestampNanos); - long clientSecondTimestamp = - TimeUnit.NANOSECONDS.toMillis(clientAfter.lastLocalStreamCreatedTimeNanos); - assertEquals(currentTimeMillis(), clientSecondTimestamp); + assertEquals(fakeCurrentTimeNanos(), clientAfter.lastLocalStreamCreatedTimeNanos); ServerStream serverStream = serverStreamCreation.stream; serverStream.close(Status.OK, new Metadata()); @@ -1636,14 +1638,10 @@ public abstract class AbstractTransportTest { TransportStats serverAfter = getTransportStats(serverTransportListener.transport); assertEquals(1, serverAfter.messagesReceived); - long serverTimestamp = - TimeUnit.NANOSECONDS.toMillis(serverAfter.lastMessageReceivedTimeNanos); - assertEquals(currentTimeMillis(), serverTimestamp); + assertEquals(fakeCurrentTimeNanos(), serverAfter.lastMessageReceivedTimeNanos); TransportStats clientAfter = getTransportStats(client); assertEquals(1, clientAfter.messagesSent); - long clientTimestamp = - TimeUnit.NANOSECONDS.toMillis(clientAfter.lastMessageSentTimeNanos); - assertEquals(currentTimeMillis(), clientTimestamp); + assertEquals(fakeCurrentTimeNanos(), clientAfter.lastMessageSentTimeNanos); serverStream.close(Status.OK, new Metadata()); } @@ -1680,14 +1678,10 @@ public abstract class AbstractTransportTest { TransportStats serverAfter = getTransportStats(serverTransportListener.transport); assertEquals(1, serverAfter.messagesSent); - long serverTimestmap = TimeUnit.NANOSECONDS.toMillis(serverAfter.lastMessageSentTimeNanos); - assertEquals(currentTimeMillis(), serverTimestmap); + assertEquals(fakeCurrentTimeNanos(), serverAfter.lastMessageSentTimeNanos); TransportStats clientAfter = getTransportStats(client); assertEquals(1, clientAfter.messagesReceived); - long clientTimestmap = - TimeUnit.NANOSECONDS.toMillis(clientAfter.lastMessageReceivedTimeNanos); - assertEquals(currentTimeMillis(), clientTimestmap); - + assertEquals(fakeCurrentTimeNanos(), clientAfter.lastMessageReceivedTimeNanos); serverStream.close(Status.OK, new Metadata()); } |