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();