Silence useless netty warnings in the remote worker
Otherwise it logs warnings that look like this:
170714 08:16:28.552:WT 18 [io.grpc.netty.NettyServerHandler.onStreamError]
Stream Error io.netty.handler.codec.http2.Http2Exception$StreamException:
Received DATA frame for an/ unknown stream 11369
As far as we can tell, these do not indicate any problem with the connection.
We believe they happen when the local side closes a stream, but the remote
side hasn't received that notification yet, so there may still be packets for
that stream en-route to the local machine. The wording 'unknown stream' is
misleading - the stream was previously known, but was recently closed. I'm
told upstream discussed this, but didn't want to keep information about
closed streams around.
PiperOrigin-RevId: 162194736
diff --git a/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/RemoteWorker.java b/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/RemoteWorker.java
index 10da520..8d47d5c 100644
--- a/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/RemoteWorker.java
+++ b/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/RemoteWorker.java
@@ -57,6 +57,7 @@
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
import java.util.logging.Logger;
/**
@@ -64,6 +65,10 @@
* based on gRPC.
*/
public final class RemoteWorker {
+ // We need to keep references to the root and netty loggers to prevent them from being garbage
+ // 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 final RemoteWorkerOptions workerOptions;
@@ -169,13 +174,25 @@
RemoteOptions remoteOptions = parser.getOptions(RemoteOptions.class);
RemoteWorkerOptions remoteWorkerOptions = parser.getOptions(RemoteWorkerOptions.class);
- Logger rootLog = Logger.getLogger("");
- rootLog.getHandlers()[0].setFormatter(new SingleLineFormatter());
+ rootLogger.getHandlers()[0].setFormatter(new SingleLineFormatter());
if (remoteWorkerOptions.debug) {
- Logger.getLogger("com.google").setLevel(FINE);
- rootLog.getHandlers()[0].setLevel(FINE);
+ rootLogger.getHandlers()[0].setLevel(FINE);
}
+ // Only log severe log messages from Netty. Otherwise it logs warnings that look like this:
+ //
+ // 170714 08:16:28.552:WT 18 [io.grpc.netty.NettyServerHandler.onStreamError] Stream Error
+ // io.netty.handler.codec.http2.Http2Exception$StreamException: Received DATA frame for an
+ // unknown stream 11369
+ //
+ // As far as we can tell, these do not indicate any problem with the connection. We believe they
+ // happen when the local side closes a stream, but the remote side hasn't received that
+ // notification yet, so there may still be packets for that stream en-route to the local
+ // machine. The wording 'unknown stream' is misleading - the stream was previously known, but
+ // was recently closed. I'm told upstream discussed this, but didn't want to keep information
+ // about closed streams around.
+ nettyLogger.setLevel(Level.SEVERE);
+
FileSystem fs = getFileSystem();
Path sandboxPath = null;
if (remoteWorkerOptions.sandboxing) {