aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2016-07-18 09:29:33 +0000
committerGravatar Yun Peng <pcloudy@google.com>2016-07-18 10:45:17 +0000
commit48c85a407ea6d9dc0203a2c3b9e9cf80c9d29771 (patch)
tree3686abe063ddfcafff7668f9d050cc1aae580edb /src/main/java
parent7a58c7fd95b6bd42493047386a0513657a8fd128 (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.java22
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;
}
}