Fix SimpleLogHandler's symbolic link creation.

Ensure we delete the previously existing symbolic link even if it's invalid.

RELNOTES: None.
PiperOrigin-RevId: 210582854
diff --git a/src/main/java/com/google/devtools/build/lib/util/SimpleLogHandler.java b/src/main/java/com/google/devtools/build/lib/util/SimpleLogHandler.java
index d26a1bf..65862b4 100644
--- a/src/main/java/com/google/devtools/build/lib/util/SimpleLogHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/util/SimpleLogHandler.java
@@ -30,6 +30,7 @@
 import java.lang.management.ManagementFactory;
 import java.nio.file.DirectoryStream;
 import java.nio.file.Files;
+import java.nio.file.LinkOption;
 import java.nio.file.Path;
 import java.text.ParseException;
 import java.text.ParsePosition;
@@ -758,7 +759,7 @@
       // as fatal.
       try {
         checkState(symlinkPath.getParent().equals(output.getPath().getParent()));
-        if (Files.exists(symlinkPath)) {
+        if (Files.exists(symlinkPath, LinkOption.NOFOLLOW_LINKS)) {
           Files.delete(symlinkPath);
         }
         Files.createSymbolicLink(symlinkPath, output.getPath().getFileName());
diff --git a/src/test/java/com/google/devtools/build/lib/util/SimpleLogHandlerTest.java b/src/test/java/com/google/devtools/build/lib/util/SimpleLogHandlerTest.java
index 4b88950..33a96f5 100644
--- a/src/test/java/com/google/devtools/build/lib/util/SimpleLogHandlerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/util/SimpleLogHandlerTest.java
@@ -224,6 +224,22 @@
   }
 
   @Test
+  public void testSymbolicLinkInitiallyInvalidReplaced() throws Exception {
+    Path symlinkPath = Paths.get(tmp.getRoot().toString(), "hello");
+    Files.createSymbolicLink(symlinkPath, Paths.get("no-such-file"));
+
+    // Expected to delete the (invalid) symlink and replace with a symlink to the log
+    SimpleLogHandler handler =
+        SimpleLogHandler.builder().setPrefix(symlinkPath.toString()).build();
+    handler.publish(new LogRecord(Level.SEVERE, "Hello world")); // To open the log file.
+
+    assertThat(handler.getSymbolicLinkPath().toString()).isEqualTo(symlinkPath.toString());
+    assertThat(Files.isSymbolicLink(handler.getSymbolicLinkPath())).isTrue();
+    assertThat(Files.readSymbolicLink(handler.getSymbolicLinkPath()).toString())
+        .isEqualTo(handler.getCurrentLogFilePath().get().getFileName().toString());
+  }
+
+  @Test
   public void testLogLevelEqualPublished() throws Exception {
     SimpleLogHandler handler =
         SimpleLogHandler.builder()