Migrate remote worker to Flogger. This wasn't strictly necessary for Bazel's Flogger clean-up, but I think worth it anyway.
PiperOrigin-RevId: 313609431
diff --git a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ActionCacheServer.java b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ActionCacheServer.java
index a9e5d83..35c67c4 100644
--- a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ActionCacheServer.java
+++ b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ActionCacheServer.java
@@ -14,20 +14,19 @@
package com.google.devtools.build.remote.worker;
-import static java.util.logging.Level.WARNING;
import build.bazel.remote.execution.v2.ActionCacheGrpc.ActionCacheImplBase;
import build.bazel.remote.execution.v2.ActionResult;
import build.bazel.remote.execution.v2.GetActionResultRequest;
import build.bazel.remote.execution.v2.UpdateActionResultRequest;
+import com.google.common.flogger.GoogleLogger;
import com.google.devtools.build.lib.remote.common.RemoteCacheClient.ActionKey;
import com.google.devtools.build.lib.remote.util.DigestUtil;
import io.grpc.stub.StreamObserver;
-import java.util.logging.Logger;
/** A basic implementation of an {@link ActionCacheImplBase} service. */
final class ActionCacheServer extends ActionCacheImplBase {
- private static final Logger logger = Logger.getLogger(ActionCacheImplBase.class.getName());
+ private static final GoogleLogger logger = GoogleLogger.forEnclosingClass();
private final OnDiskBlobStoreCache cache;
private final DigestUtil digestUtil;
@@ -52,7 +51,7 @@
responseObserver.onNext(result);
responseObserver.onCompleted();
} catch (Exception e) {
- logger.log(WARNING, "getActionResult request failed.", e);
+ logger.atWarning().withCause(e).log("getActionResult request failed");
responseObserver.onError(StatusUtils.internalError(e));
}
}
@@ -66,7 +65,7 @@
responseObserver.onNext(request.getActionResult());
responseObserver.onCompleted();
} catch (Exception e) {
- logger.log(WARNING, "updateActionResult request failed.", e);
+ logger.atWarning().withCause(e).log("updateActionResult request failed");
responseObserver.onError(StatusUtils.internalError(e));
}
}
diff --git a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/BUILD b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/BUILD
index 5fb5522..a265b4c 100644
--- a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/BUILD
+++ b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/BUILD
@@ -34,6 +34,7 @@
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/common/options",
"//src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/http",
+ "//third_party:flogger",
"//third_party:guava",
"//third_party:netty",
"//third_party/grpc:grpc-jar",
diff --git a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ByteStreamServer.java b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ByteStreamServer.java
index 4a5b30b..39b4fd2 100644
--- a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ByteStreamServer.java
+++ b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ByteStreamServer.java
@@ -15,8 +15,6 @@
package com.google.devtools.build.remote.worker;
import static com.google.devtools.build.lib.remote.util.Utils.getFromFuture;
-import static java.util.logging.Level.SEVERE;
-import static java.util.logging.Level.WARNING;
import build.bazel.remote.execution.v2.Digest;
import com.google.bytestream.ByteStreamGrpc.ByteStreamImplBase;
@@ -24,6 +22,7 @@
import com.google.bytestream.ByteStreamProto.ReadResponse;
import com.google.bytestream.ByteStreamProto.WriteRequest;
import com.google.bytestream.ByteStreamProto.WriteResponse;
+import com.google.common.flogger.GoogleLogger;
import com.google.devtools.build.lib.remote.Chunker;
import com.google.devtools.build.lib.remote.common.CacheNotFoundException;
import com.google.devtools.build.lib.remote.util.DigestUtil;
@@ -35,12 +34,11 @@
import java.io.IOException;
import java.io.OutputStream;
import java.util.UUID;
-import java.util.logging.Logger;
import javax.annotation.Nullable;
/** A basic implementation of a {@link ByteStreamImplBase} service. */
final class ByteStreamServer extends ByteStreamImplBase {
- private static final Logger logger = Logger.getLogger(ByteStreamServer.class.getName());
+ private static final GoogleLogger logger = GoogleLogger.forEnclosingClass();
private final OnDiskBlobStoreCache cache;
private final Path workPath;
private final DigestUtil digestUtil;
@@ -89,7 +87,7 @@
} catch (CacheNotFoundException e) {
responseObserver.onError(StatusUtils.notFoundError(digest));
} catch (Exception e) {
- logger.log(WARNING, "Read request failed.", e);
+ logger.atWarning().withCause(e).log("Read request failed");
responseObserver.onError(StatusUtils.internalError(e));
}
}
@@ -101,7 +99,7 @@
FileSystemUtils.createDirectoryAndParents(temp.getParentDirectory());
FileSystemUtils.createEmptyFile(temp);
} catch (IOException e) {
- logger.log(SEVERE, "Failed to create temporary file for upload", e);
+ logger.atSevere().withCause(e).log("Failed to create temporary file for upload");
responseObserver.onError(StatusUtils.internalError(e));
// We need to make sure that subsequent onNext or onCompleted calls don't make any further
// calls on the responseObserver after the onError above, so we return a no-op observer.
@@ -190,13 +188,13 @@
@Override
public void onError(Throwable t) {
if (Status.fromThrowable(t).getCode() != Status.Code.CANCELLED) {
- logger.log(WARNING, "Write request failed remotely.", t);
+ logger.atWarning().withCause(t).log("Write request failed remotely");
}
closed = true;
try {
temp.delete();
} catch (IOException e) {
- logger.log(WARNING, "Could not delete temp file.", e);
+ logger.atWarning().withCause(e).log("Could not delete temp file");
}
}
@@ -223,7 +221,7 @@
try {
temp.delete();
} catch (IOException e) {
- logger.log(WARNING, "Could not delete temp file.", e);
+ logger.atWarning().withCause(e).log("Could not delete temp file");
}
if (!d.equals(digest)) {
@@ -238,7 +236,7 @@
responseObserver.onNext(WriteResponse.newBuilder().setCommittedSize(offset).build());
responseObserver.onCompleted();
} catch (Exception e) {
- logger.log(WARNING, "Write request failed.", e);
+ logger.atWarning().withCause(e).log("Write request failed");
responseObserver.onError(StatusUtils.internalError(e));
closed = true;
}
diff --git a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/CasServer.java b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/CasServer.java
index e6634a3..e05e843 100644
--- a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/CasServer.java
+++ b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/CasServer.java
@@ -15,7 +15,6 @@
package com.google.devtools.build.remote.worker;
import static com.google.devtools.build.lib.remote.util.Utils.getFromFuture;
-import static java.util.logging.Level.WARNING;
import build.bazel.remote.execution.v2.BatchUpdateBlobsRequest;
import build.bazel.remote.execution.v2.BatchUpdateBlobsResponse;
@@ -27,6 +26,7 @@
import build.bazel.remote.execution.v2.FindMissingBlobsResponse;
import build.bazel.remote.execution.v2.GetTreeRequest;
import build.bazel.remote.execution.v2.GetTreeResponse;
+import com.google.common.flogger.GoogleLogger;
import com.google.devtools.build.lib.remote.common.CacheNotFoundException;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.rpc.Code;
@@ -35,11 +35,10 @@
import java.util.Deque;
import java.util.HashSet;
import java.util.Set;
-import java.util.logging.Logger;
/** A basic implementation of a {@link ContentAddressableStorageImplBase} service. */
final class CasServer extends ContentAddressableStorageImplBase {
- private static final Logger logger = Logger.getLogger(CasServer.class.getName());
+ private static final GoogleLogger logger = GoogleLogger.forEnclosingClass();
static final long MAX_BATCH_SIZE_BYTES = 1024 * 1024 * 4;
private final OnDiskBlobStoreCache cache;
@@ -106,7 +105,7 @@
responseObserver.onError(StatusUtils.interruptedError(digest));
return;
} catch (Exception e) {
- logger.log(WARNING, "Read request failed.", e);
+ logger.atWarning().withCause(e).log("Read request failed");
responseObserver.onError(StatusUtils.internalError(e));
return;
}
@@ -114,7 +113,7 @@
try {
directory = Directory.parseFrom(directoryBytes);
} catch (InvalidProtocolBufferException e) {
- logger.log(WARNING, "Failed to parse directory in tree.", e);
+ logger.atWarning().withCause(e).log("Failed to parse directory in tree");
responseObserver.onError(StatusUtils.internalError(e));
return;
}
diff --git a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ExecutionServer.java b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ExecutionServer.java
index 5ad5d33..9b7ff5a 100644
--- a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ExecutionServer.java
+++ b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ExecutionServer.java
@@ -15,10 +15,6 @@
package com.google.devtools.build.remote.worker;
import static com.google.devtools.build.lib.remote.util.Utils.getFromFuture;
-import static java.util.logging.Level.FINE;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.SEVERE;
-import static java.util.logging.Level.WARNING;
import build.bazel.remote.execution.v2.Action;
import build.bazel.remote.execution.v2.ActionResult;
@@ -33,6 +29,7 @@
import build.bazel.remote.execution.v2.RequestMetadata;
import build.bazel.remote.execution.v2.WaitExecutionRequest;
import com.google.common.base.Throwables;
+import com.google.common.flogger.GoogleLogger;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
@@ -75,13 +72,11 @@
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import javax.annotation.Nullable;
/** A basic implementation of an {@link ExecutionImplBase} service. */
final class ExecutionServer extends ExecutionImplBase {
- private static final Logger logger = Logger.getLogger(ExecutionServer.class.getName());
+ private static final GoogleLogger logger = GoogleLogger.forEnclosingClass();
// The name of the container image entry in the Platform proto
// (see third_party/googleapis/devtools/remoteexecution/*/remote_execution.proto and
@@ -178,7 +173,7 @@
if (e instanceof ExecutionStatusException) {
resp = ((ExecutionStatusException) e).getResponse();
} else {
- logger.log(Level.SEVERE, "Work failed: " + opName, e);
+ logger.atSevere().withCause(e).log("Work failed: %s", opName);
resp =
ExecuteResponse.newBuilder()
.setStatus(StatusUtils.internalErrorStatus(e))
@@ -213,6 +208,7 @@
waitExecution(opName, future, responseObserver);
}
+ @SuppressWarnings("LogAndThrow")
private ActionResult execute(ExecuteRequest request, String id)
throws IOException, InterruptedException, StatusException {
Path tempRoot = workPath.getRelative("build-" + id);
@@ -224,25 +220,21 @@
String.format(
"build-request-id: %s command-id: %s action-id: %s",
meta.getCorrelatedInvocationsId(), meta.getToolInvocationId(), meta.getActionId());
- logger.log(FINE, "Received work for: {0}", workDetails);
+ logger.atFine().log("Received work for: %s", workDetails);
ActionResult result = execute(request.getActionDigest(), tempRoot);
- logger.log(FINE, "Completed {0}.", workDetails);
+ logger.atFine().log("Completed %s", workDetails);
return result;
} catch (Exception e) {
- logger.log(Level.SEVERE, "Work failed: {0} {1}.", new Object[] {workDetails, e});
+ logger.atSevere().withCause(e).log("Work failed: %s", workDetails);
throw e;
} finally {
if (workerOptions.debug) {
- logger.log(INFO, "Preserving work directory {0}.", tempRoot);
+ logger.atInfo().log("Preserving work directory %s", tempRoot);
} else {
try {
tempRoot.deleteTree();
} catch (IOException e) {
- logger.log(
- SEVERE,
- String.format(
- "Failed to delete tmp directory %s: %s",
- tempRoot, Throwables.getStackTraceAsString(e)));
+ logger.atSevere().withCause(e).log("Failed to delete tmp directory %s", tempRoot);
}
}
}
@@ -320,7 +312,7 @@
String.format(
"Command:\n%s\nexceeded deadline of %f seconds.",
Arrays.toString(command.getArgumentsList().toArray()), timeoutMillis / 1000.0);
- logger.warning(errMessage);
+ logger.atWarning().log(errMessage);
errStatus =
Status.newBuilder()
.setCode(Code.DEADLINE_EXCEEDED.getNumber())
@@ -397,8 +389,8 @@
cmd.execute(stdout, stderr);
return Long.parseLong(stdout.toString().trim());
} catch (CommandException | NumberFormatException e) {
- logger.log(
- WARNING, "Could not get UID for passing to Docker container. Proceeding without it.", e);
+ logger.atWarning().withCause(e).log(
+ "Could not get UID for passing to Docker container. Proceeding without it");
return -1;
}
}
diff --git a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/RemoteWorker.java b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/RemoteWorker.java
index 0bd3791..c28e086 100644
--- a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/RemoteWorker.java
+++ b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/RemoteWorker.java
@@ -16,8 +16,6 @@
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.logging.Level.FINE;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.SEVERE;
import build.bazel.remote.execution.v2.ActionCacheGrpc.ActionCacheImplBase;
import build.bazel.remote.execution.v2.ActionResult;
@@ -27,6 +25,7 @@
import com.google.bytestream.ByteStreamGrpc.ByteStreamImplBase;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.flogger.GoogleLogger;
import com.google.common.io.ByteStreams;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningScheduledExecutorService;
@@ -88,7 +87,7 @@
// collected, which would cause us to loose their configuration.
private static final Logger rootLogger = Logger.getLogger("");
private static final Logger nettyLogger = Logger.getLogger("io.grpc.netty");
- private static final Logger logger = Logger.getLogger(RemoteWorker.class.getName());
+ private static final GoogleLogger logger = GoogleLogger.forEnclosingClass();
private final RemoteWorkerOptions workerOptions;
private final ActionCacheImplBase actionCacheServer;
@@ -166,11 +165,11 @@
if (execServer != null) {
b.addService(ServerInterceptors.intercept(execServer, headersInterceptor));
} else {
- logger.info("Execution disabled, only serving cache requests.");
+ logger.atInfo().log("Execution disabled, only serving cache requests");
}
Server server = b.build();
- logger.log(INFO, "Starting gRPC server on port {0,number,#}.", workerOptions.listenPort);
+ logger.atInfo().log("Starting gRPC server on port %d", workerOptions.listenPort);
server.start();
return server;
@@ -251,7 +250,7 @@
if (remoteWorkerOptions.casPath == null
|| (!PathFragment.create(remoteWorkerOptions.casPath).isAbsolute()
|| !fs.getPath(remoteWorkerOptions.casPath).exists())) {
- logger.severe("--cas_path must be specified and refer to an exiting absolut path.");
+ logger.atSevere().log("--cas_path must be specified and refer to an exiting absolute path");
System.exit(1);
return;
}
@@ -279,11 +278,10 @@
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new HttpCacheServerInitializer());
ch = b.bind(remoteWorkerOptions.httpListenPort).sync().channel();
- logger.log(
- INFO,
- "Started HTTP cache server on port " + remoteWorkerOptions.httpListenPort);
+ logger.atInfo().log(
+ "Started HTTP cache server on port %d", remoteWorkerOptions.httpListenPort);
} else {
- logger.log(INFO, "Not starting HTTP cache server");
+ logger.atInfo().log("Not starting HTTP cache server");
}
worker.createPidFile();
@@ -304,20 +302,20 @@
private static Path prepareSandboxRunner(FileSystem fs, RemoteWorkerOptions remoteWorkerOptions) {
if (OS.getCurrent() != OS.LINUX) {
- logger.severe("Sandboxing requested, but it is currently only available on Linux.");
+ logger.atSevere().log("Sandboxing requested, but it is currently only available on Linux");
System.exit(1);
}
if (remoteWorkerOptions.workPath == null) {
- logger.severe("Sandboxing requested, but --work_path was not specified.");
+ logger.atSevere().log("Sandboxing requested, but --work_path was not specified");
System.exit(1);
}
InputStream sandbox = RemoteWorker.class.getResourceAsStream("/main/tools/linux-sandbox");
if (sandbox == null) {
- logger.severe(
+ logger.atSevere().log(
"Sandboxing requested, but could not find bundled linux-sandbox binary. "
- + "Please rebuild a worker_deploy.jar on Linux to make this work.");
+ + "Please rebuild a worker_deploy.jar on Linux to make this work");
System.exit(1);
}
@@ -329,7 +327,8 @@
}
sandboxPath.setExecutable(true);
} catch (IOException e) {
- logger.log(SEVERE, "Could not extract the bundled linux-sandbox binary to " + sandboxPath, e);
+ logger.atSevere().withCause(e).log(
+ "Could not extract the bundled linux-sandbox binary to %s", sandboxPath);
System.exit(1);
}
@@ -344,11 +343,9 @@
try {
cmdResult = cmd.execute();
} catch (CommandException e) {
- logger.log(
- SEVERE,
- "Sandboxing requested, but it failed to execute 'true' as a self-check: "
- + new String(cmdResult.getStderr(), UTF_8),
- e);
+ logger.atSevere().withCause(e).log(
+ "Sandboxing requested, but it failed to execute 'true' as a self-check: %s",
+ new String(cmdResult.getStderr(), UTF_8));
System.exit(1);
}
diff --git a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/RemoteWorkerOptions.java b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/RemoteWorkerOptions.java
index 78a040f..e219a0b 100644
--- a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/RemoteWorkerOptions.java
+++ b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/RemoteWorkerOptions.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.remote.worker;
+import com.google.common.flogger.GoogleLogger;
import com.google.devtools.build.lib.actions.LocalHostCapacity;
import com.google.devtools.build.lib.util.ResourceConverter;
import com.google.devtools.common.options.Option;
@@ -22,11 +23,10 @@
import com.google.devtools.common.options.OptionsBase;
import com.google.devtools.common.options.OptionsParsingException;
import java.util.List;
-import java.util.logging.Logger;
/** Options for remote worker. */
public class RemoteWorkerOptions extends OptionsBase {
- private static final Logger logger = Logger.getLogger(RemoteWorkerOptions.class.getName());
+ private static final GoogleLogger logger = GoogleLogger.forEnclosingClass();
@Option(
name = "listen_port",
@@ -197,12 +197,11 @@
String.format("Value '(%d)' must be at least %d.", value, minValue));
}
if (value > maxValue) {
- logger.warning(
- String.format(
- "Flag remoteWorker \"jobs\" ('%d') was set too high. "
- + "This is a result of passing large values to --local_resources or --jobs. "
- + "Using '%d' jobs",
- value, maxValue));
+ logger.atWarning().log(
+ "Flag remoteWorker \"jobs\" ('%d') was set too high. "
+ + "This is a result of passing large values to --local_resources or --jobs. "
+ + "Using '%d' jobs",
+ value, maxValue);
value = maxValue;
}
return value;