Internal refactoring PiperOrigin-RevId: 686495724 Change-Id: I07c07ec72cd461e74a0ec959d074abf4aaeaf7e6
diff --git a/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java index 93664aa..7381592 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java
@@ -89,6 +89,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Optional; import java.util.OptionalInt; import java.util.Set; import java.util.function.Function; @@ -193,6 +194,7 @@ eventHandler, FilteringPolicies.NO_FILTER, MultisetSemaphore.unbounded(), + /* maxConcurrentGetTargetsTasks= */ Optional.empty(), SimplePackageIdentifierBatchingCallback::new); checkSettings(settings); }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java index 6bef4d2..3898068 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -300,6 +300,7 @@ eventHandler, FilteringPolicies.NO_FILTER, packageSemaphore, + /* maxConcurrentGetTargetsTasks= */ Optional.empty(), SimplePackageIdentifierBatchingCallback::new); }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java index f56094e..cf625e0 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java
@@ -59,9 +59,11 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +import java.util.concurrent.Semaphore; import javax.annotation.Nullable; /** A {@link TargetPatternResolver} backed by a {@link RecursivePackageProvider}. */ @@ -76,6 +78,8 @@ private final RecursivePackageProvider recursivePackageProvider; private final ExtendedEventHandler eventHandler; private final MultisetSemaphore<PackageIdentifier> packageSemaphore; + + @Nullable private final Semaphore getTargetsTaskSemaphore; private final PackageIdentifierBatchingCallback.Factory packageIdentifierBatchingCallbackFactory; public RecursivePackageProviderBackedTargetPatternResolver( @@ -83,11 +87,16 @@ ExtendedEventHandler eventHandler, FilteringPolicy policy, MultisetSemaphore<PackageIdentifier> packageSemaphore, + Optional<Integer> maxConcurrentGetTargetsTasks, PackageIdentifierBatchingCallback.Factory packageIdentifierBatchingCallbackFactory) { this.recursivePackageProvider = recursivePackageProvider; this.eventHandler = eventHandler; this.policy = policy; this.packageSemaphore = packageSemaphore; + this.getTargetsTaskSemaphore = + maxConcurrentGetTargetsTasks.isPresent() + ? new Semaphore(maxConcurrentGetTargetsTasks.get()) + : null; this.packageIdentifierBatchingCallbackFactory = packageIdentifierBatchingCallbackFactory; } @@ -348,9 +357,22 @@ this.callback = callback; } + private void acquireTaskLock() throws InterruptedException { + if (getTargetsTaskSemaphore != null) { + getTargetsTaskSemaphore.acquire(); + } + } + + private void releaseTaskLock() { + if (getTargetsTaskSemaphore != null) { + getTargetsTaskSemaphore.release(); + } + } + @Override public Void call() throws E, InterruptedException { ImmutableSet<PackageIdentifier> pkgIdBatchSet = ImmutableSet.copyOf(packageIdentifiers); + acquireTaskLock(); packageSemaphore.acquireAll(pkgIdBatchSet); try { Iterable<Collection<Target>> resolvedTargets = @@ -372,6 +394,7 @@ callback.process(filteredTargets); } finally { packageSemaphore.releaseAll(pkgIdBatchSet); + releaseTaskLock(); } return null; }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java index 6abd924..c0bf831 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java
@@ -51,6 +51,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; import javax.annotation.Nullable; @@ -296,6 +297,7 @@ eventHandler, FilteringPolicies.NO_FILTER, /* packageSemaphore= */ null, + /* maxConcurrentGetTargetsTasks= */ Optional.empty(), SimplePackageIdentifierBatchingCallback::new); AtomicReference<Collection<Target>> result = new AtomicReference<>(); try {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java index 9fc8c59..08d2ec4 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java
@@ -35,6 +35,7 @@ import com.google.devtools.build.skyframe.SkyFunctionException; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; +import java.util.Optional; import javax.annotation.Nullable; /** @@ -69,6 +70,7 @@ env.getListener(), patternKey.getPolicy(), MultisetSemaphore.unbounded(), + /* maxConcurrentGetTargetsTasks= */ Optional.empty(), SimplePackageIdentifierBatchingCallback::new); ImmutableSet<PathFragment> excludedSubdirectories = patternKey.getExcludedSubdirectories(); ResolvedTargets.Builder<Target> resolvedTargetsBuilder = ResolvedTargets.builder();