Add backoff sleep and interruption handling to deleteTreeWithRetries. During temporary file deletion retries on IOException, sleeping with bounded backoff prevents burning 100% of a CPU core in a tight loop across thousands of filesystem syscalls, while properly re-throwing InterruptedException respects cancellation. PiperOrigin-RevId: 981249475 Change-Id: I99e929c016525eb36f827493cf0846585e31babe
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkBaseExternalContext.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkBaseExternalContext.java index 95d839f..5a42093 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkBaseExternalContext.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkBaseExternalContext.java
@@ -1188,7 +1188,7 @@ * https://github.com/bazelbuild/bazel/issues/20013 for further details. */ private static void deleteTreeWithRetries(Path downloadDirectory) - throws RepositoryFunctionException { + throws RepositoryFunctionException, InterruptedException { Instant start = Instant.now(); Instant deadline = start.plus(Duration.ofSeconds(5)); @@ -1217,6 +1217,12 @@ e), Transience.TRANSIENT); } + try { + Thread.sleep(Math.min(100, attempts * 10L)); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + throw ie; + } } } }