Remove AbruptException(ExitCode exitCode) constructor. This constructor was creating an Exception with a null message leading to possible NullPointerExceptions in a few places in our codebase. The call sites have been replaced with calls to AbruptException(String message, ExitCode exitCode) with a meaningful message. PiperOrigin-RevId: 196973540
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/SpawnLogModule.java b/src/main/java/com/google/devtools/build/lib/bazel/SpawnLogModule.java index 86ab87e..ca6d3a3 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/SpawnLogModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/SpawnLogModule.java
@@ -54,7 +54,8 @@ new AsynchronousFileOutputStream(executionOptions.executionLogFile)); } catch (IOException e) { env.getReporter().handle(Event.error(e.getMessage())); - env.getBlazeModuleEnvironment().exit(new AbruptExitException(ExitCode.COMMAND_LINE_ERROR)); + env.getBlazeModuleEnvironment().exit(new AbruptExitException( + "Error found creating SpawnLogContext", ExitCode.COMMAND_LINE_ERROR)); } builder.addActionContext(spawnLogContext); builder.addActionContextConsumer(new SpawnLogContextConsumer());
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java index 2127293..a3cafc2 100644 --- a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java +++ b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java
@@ -341,7 +341,8 @@ String message = errorMessageFromException(t); report(ERROR, message); - moduleEnvironment.exit(new AbruptExitException(ExitCode.PUBLISH_ERROR)); + moduleEnvironment.exit(new AbruptExitException( + "BuildEventServiceTransport internal error", ExitCode.PUBLISH_ERROR)); } private void maybeReportUploadError() {
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java index 5453a98..36521f9 100644 --- a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java +++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
@@ -189,7 +189,8 @@ new RemoteActionContextProvider(env, cache, executor, digestUtil, logDir); } catch (IOException e) { env.getReporter().handle(Event.error(e.getMessage())); - env.getBlazeModuleEnvironment().exit(new AbruptExitException(ExitCode.COMMAND_LINE_ERROR)); + env.getBlazeModuleEnvironment().exit(new AbruptExitException( + "Error initializing RemoteModule", ExitCode.COMMAND_LINE_ERROR)); } }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java index 3e6343b..22ef333 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
@@ -464,7 +464,7 @@ private ExitCode finalizeExitCode() { // Set the pending exception so that further calls to exit(AbruptExitException) don't lead to // unwanted thread interrupts. - if (pendingException.compareAndSet(null, new AbruptExitException(null))) { + if (pendingException.compareAndSet(null, new AbruptExitException("", null))) { return null; } if (Thread.currentThread() == commandThread) {
diff --git a/src/main/java/com/google/devtools/build/lib/util/AbruptExitException.java b/src/main/java/com/google/devtools/build/lib/util/AbruptExitException.java index bb45bb4..3dabdfc 100644 --- a/src/main/java/com/google/devtools/build/lib/util/AbruptExitException.java +++ b/src/main/java/com/google/devtools/build/lib/util/AbruptExitException.java
@@ -42,10 +42,6 @@ this.exitCode = exitCode; } - public AbruptExitException(ExitCode exitCode) { - this.exitCode = exitCode; - } - public ExitCode getExitCode() { return exitCode; }
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java b/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java index 80fc134..30d41ca 100644 --- a/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java +++ b/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java
@@ -447,7 +447,7 @@ public void exitForbidsNullExitCode() throws Exception { CommandState command = snooze.runIn(executor, dispatcher, /*expectInterruption=*/ false); try { - command.getModuleEnvironment().exit(new AbruptExitException(null)); + command.getModuleEnvironment().exit(new AbruptExitException("", null)); throw new AssertionError( "It shouldn't be allowed to pass an AbruptExitException with null ExitCode to exit()!"); } catch (NullPointerException expected) { @@ -460,16 +460,16 @@ @Test public void callingExitOnceInterruptsAndOverridesExitCode() throws Exception { CommandState command = snooze.runIn(executor, dispatcher, /*expectInterruption=*/ false); - command.getModuleEnvironment().exit(new AbruptExitException(ExitCode.NO_TESTS_FOUND)); + command.getModuleEnvironment().exit(new AbruptExitException("", ExitCode.NO_TESTS_FOUND)); command.assertFinishedWith(ExitCode.NO_TESTS_FOUND); } @Test public void callingExitSecondTimeNeitherInterruptsNorReOverridesExitCode() throws Exception { CommandState command = snooze.runIn(executor, dispatcher, /*expectInterruption=*/ true); - command.getModuleEnvironment().exit(new AbruptExitException(ExitCode.NO_TESTS_FOUND)); + command.getModuleEnvironment().exit(new AbruptExitException("", ExitCode.NO_TESTS_FOUND)); command.assertNotFinishedYet(); - command.getModuleEnvironment().exit(new AbruptExitException(ExitCode.ANALYSIS_FAILURE)); + command.getModuleEnvironment().exit(new AbruptExitException("", ExitCode.ANALYSIS_FAILURE)); command.assertNotFinishedYet(); command.requestExitWith(ExitCode.SUCCESS); command.assertFinishedWith(ExitCode.NO_TESTS_FOUND); @@ -478,7 +478,7 @@ @Test public void abruptExitCodesDontOverrideInfrastructureFailures() throws Exception { CommandState command = snooze.runIn(executor, dispatcher, /*expectInterruption=*/ true); - command.getModuleEnvironment().exit(new AbruptExitException(ExitCode.NO_TESTS_FOUND)); + command.getModuleEnvironment().exit(new AbruptExitException("", ExitCode.NO_TESTS_FOUND)); command.assertNotFinishedYet(); command.requestExitWith(ExitCode.BLAZE_INTERNAL_ERROR); command.assertFinishedWith(ExitCode.BLAZE_INTERNAL_ERROR); @@ -492,7 +492,7 @@ CommandState newCommandOnSameThread = snooze.runIn(executor, dispatcher, /*expectInterruption=*/ false); firstCommand.assertOnSameThreadAs(newCommandOnSameThread); - firstCommand.getModuleEnvironment().exit(new AbruptExitException(ExitCode.RUN_FAILURE)); + firstCommand.getModuleEnvironment().exit(new AbruptExitException("", ExitCode.RUN_FAILURE)); newCommandOnSameThread.assertNotFinishedYet(); newCommandOnSameThread.requestExitWith(ExitCode.SUCCESS); }