aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZHANG Dapeng <zdapeng@google.com>2018-05-21 12:44:06 -0700
committerGitHub <noreply@github.com>2018-05-21 12:44:06 -0700
commitf5f560ad365735a0c9bf8b86abeed16cf7dfdde7 (patch)
treeb0a34ef4d5036958b505cc1a4785ba883a91dfda
parent30478d88c722a5a25e74f80e43578cb265d0ccfb (diff)
downloadgrpc-grpc-java-f5f560ad365735a0c9bf8b86abeed16cf7dfdde7.tar.gz
all: TimeProvider to use nanos rather than millis
This is the same practice as #2833
-rw-r--r--core/src/main/java/io/grpc/internal/CallTracer.java24
-rw-r--r--core/src/main/java/io/grpc/internal/Channelz.java28
-rw-r--r--core/src/main/java/io/grpc/internal/TimeProvider.java (renamed from grpclb/src/main/java/io/grpc/grpclb/TimeProvider.java)22
-rw-r--r--core/src/main/java/io/grpc/internal/TransportTracer.java31
-rw-r--r--core/src/test/java/io/grpc/internal/ManagedChannelImplTest.java8
-rw-r--r--core/src/test/java/io/grpc/internal/ServerCallImplTest.java2
-rw-r--r--grpclb/src/main/java/io/grpc/grpclb/GrpclbClientLoadRecorder.java3
-rw-r--r--grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancer.java1
-rw-r--r--grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancerFactory.java9
-rw-r--r--grpclb/src/main/java/io/grpc/grpclb/GrpclbState.java1
-rw-r--r--grpclb/src/test/java/io/grpc/grpclb/GrpclbLoadBalancerTest.java7
-rw-r--r--netty/src/test/java/io/grpc/netty/NettyTransportTest.java12
-rw-r--r--okhttp/src/test/java/io/grpc/okhttp/OkHttpTransportTest.java12
-rw-r--r--services/src/main/java/io/grpc/services/ChannelzProtoUtil.java4
-rw-r--r--services/src/test/java/io/grpc/services/ChannelzProtoUtilTest.java10
-rw-r--r--services/src/test/java/io/grpc/services/ChannelzTestHelper.java4
-rw-r--r--testing/src/main/java/io/grpc/internal/testing/AbstractTransportTest.java44
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());
}