diff options
author | 2016-07-18 09:29:33 +0000 | |
---|---|---|
committer | 2016-07-18 10:45:17 +0000 | |
commit | 48c85a407ea6d9dc0203a2c3b9e9cf80c9d29771 (patch) | |
tree | 3686abe063ddfcafff7668f9d050cc1aae580edb /src/main/java | |
parent | 7a58c7fd95b6bd42493047386a0513657a8fd128 (diff) |
Use System#nanoTime() in the server timeout thread because it's monotonous, unlike System#currentTimeMillis().
--
MOS_MIGRATED_REVID=127697254
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java b/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java index 519a439af5..e3e95b4740 100644 --- a/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java +++ b/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java @@ -25,6 +25,7 @@ import com.google.devtools.build.lib.server.CommandProtos.PingRequest; import com.google.devtools.build.lib.server.CommandProtos.PingResponse; import com.google.devtools.build.lib.server.CommandProtos.RunRequest; import com.google.devtools.build.lib.server.CommandProtos.RunResponse; +import com.google.devtools.build.lib.util.BlazeClock; import com.google.devtools.build.lib.util.Clock; import com.google.devtools.build.lib.util.ExitCode; import com.google.devtools.build.lib.util.Preconditions; @@ -34,10 +35,6 @@ import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; import com.google.protobuf.ByteString; -import io.grpc.Server; -import io.grpc.netty.NettyServerBuilder; -import io.grpc.stub.StreamObserver; - import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Field; @@ -49,10 +46,15 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.UUID; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; import javax.annotation.concurrent.GuardedBy; +import io.grpc.Server; +import io.grpc.netty.NettyServerBuilder; +import io.grpc.stub.StreamObserver; + /** * gRPC server class. * @@ -65,6 +67,8 @@ public class GrpcServerImpl extends RPCServer implements CommandServerGrpc.Comma // part correct? private static final Charset CHARSET = Charset.forName("ISO-8859-1"); + private static final long NANOSECONDS_IN_MS = TimeUnit.MILLISECONDS.toNanos(1); + private class RunningCommand implements AutoCloseable { private final Thread thread; private final String id; @@ -223,15 +227,17 @@ public class GrpcServerImpl extends RPCServer implements CommandServerGrpc.Comma while (true) { if (!wasIdle && idle) { - shutdownTime = System.currentTimeMillis() + ((long) maxIdleSeconds) * 1000; + shutdownTime = BlazeClock.nanoTime() + + ((long) maxIdleSeconds) * 1000L * NANOSECONDS_IN_MS; } try { if (idle) { Verify.verify(shutdownTime > 0); - long waitTime = shutdownTime - System.currentTimeMillis(); + long waitTime = shutdownTime - BlazeClock.nanoTime(); if (waitTime > 0) { - runningCommands.wait(waitTime); + // Round upwards so that we don't busy-wait in the last millisecond + runningCommands.wait((waitTime + NANOSECONDS_IN_MS - 1) / NANOSECONDS_IN_MS); } } else { runningCommands.wait(); @@ -242,7 +248,7 @@ public class GrpcServerImpl extends RPCServer implements CommandServerGrpc.Comma wasIdle = idle; idle = runningCommands.isEmpty(); - if (wasIdle && idle && System.currentTimeMillis() >= shutdownTime) { + if (wasIdle && idle && BlazeClock.nanoTime() >= shutdownTime) { break; } } |