Pre-size the deletion visitor’s visited set (#32071) DeletingNodeVisitor sizes its concurrent visited set from pendingVisitations at construction. This reduces ConcurrentHashMap resizing while preserving concurrent deletion and interruption behavior. In the original 13.6-million-node deletion fixture, cumulative allocation fell by about 250 MiB; wall time was unchanged. Existing eager invalidation tests cover interrupted deletion, reverse dependencies, and processing all pending nodes. The complete patch matches the original and git diff --check passes upstream. @fmeum Closes #32071 COPYBARA_INTEGRATE_REVIEW=https://github.com/bazelbuild/bazel/pull/32071 from dzbarsky:dzbarsky/upstream-bazel-142 a46544fc9b7a858d29ba918e765584771e332f8e PiperOrigin-RevId: 1008459838 Change-Id: Ib821d9869f66bebe39f9e599eb4fcfc434030c1f
diff --git a/src/main/java/com/google/devtools/build/skyframe/InvalidatingNodeVisitor.java b/src/main/java/com/google/devtools/build/skyframe/InvalidatingNodeVisitor.java index be90d10..15af5d0 100644 --- a/src/main/java/com/google/devtools/build/skyframe/InvalidatingNodeVisitor.java +++ b/src/main/java/com/google/devtools/build/skyframe/InvalidatingNodeVisitor.java
@@ -227,7 +227,7 @@ /** A node-deleting implementation. */ static final class DeletingNodeVisitor extends InvalidatingNodeVisitor<InMemoryGraph> { - private final Set<SkyKey> visited = Sets.newConcurrentHashSet(); + private final Set<SkyKey> visited; private final boolean traverseGraph; private final DeletingInvalidationState state; @@ -241,6 +241,7 @@ progressReceiver, state, NamedForkJoinPool.newNamedPool("deleting node visitor", DEFAULT_THREAD_COUNT)); + this.visited = ConcurrentHashMap.newKeySet(pendingVisitations.size()); this.traverseGraph = traverseGraph; this.state = state; }