Add end-of-command Skycache token leak check with BugReport alerting. In resetCommandState(), awaits termination of readExecutorOwner and commandExecutor with a timeout; if fully drained and in-flight tokens remain non-zero, triggers BugReport.sendBugReport(). PiperOrigin-RevId: 972115697 Change-Id: I469cbc3bc5d88b75c36f5b85ce15147286f6095d
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/BUILD index 6138776..8c3b298 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/BUILD
@@ -432,10 +432,7 @@ java_library( name = "skycache_channel_state_advisor", srcs = ["SkycacheChannelStateAdvisor.java"], - deps = [ - "//src/main/java/com/google/devtools/build/lib/skybridge:skybridge_interface", - "//third_party/java/guava:annotations", - ], + deps = ["//src/main/java/com/google/devtools/build/lib/skybridge:skybridge_interface"], ) java_library(
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/SkycacheChannelStateAdvisor.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/SkycacheChannelStateAdvisor.java index 3724632..ddd635d 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/SkycacheChannelStateAdvisor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/SkycacheChannelStateAdvisor.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.skyframe.serialization.analysis; -import com.google.common.annotations.VisibleForTesting; import com.google.devtools.build.lib.skybridge.SkybridgeInterface; import java.util.concurrent.atomic.AtomicLong; @@ -49,9 +48,7 @@ inFlightRequests.addAndGet(-delta); } - @VisibleForTesting - // While this could be package private, that's forbidden for SkybridgeInterface classes. - public long getInFlightRequestsForTesting() { + public long getInFlightRequests() { return inFlightRequests.get(); }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/analysis/SkycacheChannelStateAdvisorTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/analysis/SkycacheChannelStateAdvisorTest.java index 2f55ac0..3c6fc05 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/analysis/SkycacheChannelStateAdvisorTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/analysis/SkycacheChannelStateAdvisorTest.java
@@ -36,12 +36,12 @@ for (int i = 0; i < 100_000; i++) { advisor.incrementInFlightRequests(); } - assertThat(advisor.getInFlightRequestsForTesting()).isEqualTo(100_000); + assertThat(advisor.getInFlightRequests()).isEqualTo(100_000); assertThat(advisor.isSaturated()).isFalse(); // Restore counter to zero advisor.decrementInFlightRequests(100_000); - assertThat(advisor.getInFlightRequestsForTesting()).isEqualTo(0); + assertThat(advisor.getInFlightRequests()).isEqualTo(0); } @Test @@ -60,36 +60,36 @@ SkycacheChannelStateAdvisor advisor = new SkycacheChannelStateAdvisor(100); assertThat(advisor.isSaturated()).isFalse(); - assertThat(advisor.getInFlightRequestsForTesting()).isEqualTo(0); + assertThat(advisor.getInFlightRequests()).isEqualTo(0); // Below limit for (int i = 0; i < 99; i++) { advisor.incrementInFlightRequests(); } assertThat(advisor.isSaturated()).isFalse(); - assertThat(advisor.getInFlightRequestsForTesting()).isEqualTo(99); + assertThat(advisor.getInFlightRequests()).isEqualTo(99); // Increment to 100 (at limit) advisor.incrementInFlightRequests(); assertThat(advisor.isSaturated()).isTrue(); - assertThat(advisor.getInFlightRequestsForTesting()).isEqualTo(100); + assertThat(advisor.getInFlightRequests()).isEqualTo(100); // Above limit for (int i = 0; i < 50; i++) { advisor.incrementInFlightRequests(); } assertThat(advisor.isSaturated()).isTrue(); - assertThat(advisor.getInFlightRequestsForTesting()).isEqualTo(150); + assertThat(advisor.getInFlightRequests()).isEqualTo(150); // Decrement by delta back below limit advisor.decrementInFlightRequests(51); assertThat(advisor.isSaturated()).isFalse(); - assertThat(advisor.getInFlightRequestsForTesting()).isEqualTo(99); + assertThat(advisor.getInFlightRequests()).isEqualTo(99); // Decrement to zero advisor.decrementInFlightRequests(99); assertThat(advisor.isSaturated()).isFalse(); - assertThat(advisor.getInFlightRequestsForTesting()).isEqualTo(0); + assertThat(advisor.getInFlightRequests()).isEqualTo(0); } @Test @@ -116,8 +116,7 @@ future.get(); } - assertThat(advisor.getInFlightRequestsForTesting()) - .isEqualTo((long) threadCount * iterationsPerThread); + assertThat(advisor.getInFlightRequests()).isEqualTo((long) threadCount * iterationsPerThread); assertThat(advisor.isSaturated()).isTrue(); // Decrement back concurrently using batch decrements @@ -135,7 +134,7 @@ future.get(); } - assertThat(advisor.getInFlightRequestsForTesting()).isEqualTo(0); + assertThat(advisor.getInFlightRequests()).isEqualTo(0); assertThat(advisor.isSaturated()).isFalse(); } finally { executor.shutdown();