diff --git a/presto-main/src/main/java/com/facebook/presto/execution/resourceGroups/InternalResourceGroup.java b/presto-main/src/main/java/com/facebook/presto/execution/resourceGroups/InternalResourceGroup.java index e07cb15dfc58e..b53dbfef143dd 100644 --- a/presto-main/src/main/java/com/facebook/presto/execution/resourceGroups/InternalResourceGroup.java +++ b/presto-main/src/main/java/com/facebook/presto/execution/resourceGroups/InternalResourceGroup.java @@ -17,8 +17,6 @@ import com.facebook.presto.execution.ManagedQueryExecution; import com.facebook.presto.execution.SqlQueryExecution; import com.facebook.presto.execution.resourceGroups.WeightedFairQueue.Usage; -import com.facebook.presto.metadata.AllNodes; -import com.facebook.presto.metadata.InternalNode; import com.facebook.presto.metadata.InternalNodeManager; import com.facebook.presto.server.QueryStateInfo; import com.facebook.presto.server.ResourceGroupInfo; @@ -29,7 +27,6 @@ import com.facebook.presto.spi.resourceGroups.ResourceGroupState; import com.facebook.presto.spi.resourceGroups.SchedulingPolicy; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Sets; import io.airlift.units.DataSize; import io.airlift.units.Duration; import org.weakref.jmx.Managed; @@ -1021,13 +1018,6 @@ private boolean canQueueMore() } } - private int getActiveWorkerCount() - { - AllNodes allNodes = nodeManager.getAllNodes(); - Set activeWorkers = Sets.difference(Sets.difference(allNodes.getActiveNodes(), allNodes.getActiveResourceManagers()), allNodes.getActiveCatalogServers()); - return activeWorkers.size(); - } - private boolean canRunMore() { checkState(Thread.holdsLock(root), "Must hold lock"); @@ -1052,7 +1042,7 @@ private boolean canRunMore() if (resourceGroupRuntimeInfo.isPresent()) { totalRunningQueries += resourceGroupRuntimeInfo.get().getRunningQueries() + resourceGroupRuntimeInfo.get().getDescendantRunningQueries(); } - int activeWorkerCount = getActiveWorkerCount(); + int activeWorkerCount = nodeManager.getAllNodes().getActiveWorkerCount(); return totalRunningQueries < hardConcurrencyLimit && cachedMemoryUsageBytes <= softMemoryLimitBytes && totalRunningQueries * workersPerQueryLimit <= activeWorkerCount; } diff --git a/presto-main/src/main/java/com/facebook/presto/metadata/AllNodes.java b/presto-main/src/main/java/com/facebook/presto/metadata/AllNodes.java index 051e58fec8955..c2e4d6ba53bcf 100644 --- a/presto-main/src/main/java/com/facebook/presto/metadata/AllNodes.java +++ b/presto-main/src/main/java/com/facebook/presto/metadata/AllNodes.java @@ -14,6 +14,7 @@ package com.facebook.presto.metadata; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; import java.util.Objects; import java.util.Set; @@ -28,6 +29,7 @@ public class AllNodes private final Set activeCoordinators; private final Set activeResourceManagers; private final Set activeCatalogServers; + private final int activeWorkerCount; public AllNodes( Set activeNodes, @@ -43,6 +45,8 @@ public AllNodes( this.activeCoordinators = ImmutableSet.copyOf(requireNonNull(activeCoordinators, "activeCoordinators is null")); this.activeResourceManagers = ImmutableSet.copyOf(requireNonNull(activeResourceManagers, "activeResourceManagers is null")); this.activeCatalogServers = ImmutableSet.copyOf(requireNonNull(activeCatalogServers, "activeCatalogServers is null")); + + this.activeWorkerCount = Sets.difference(Sets.difference(activeNodes, activeResourceManagers), activeCatalogServers).size(); } public Set getActiveNodes() @@ -50,6 +54,11 @@ public Set getActiveNodes() return activeNodes; } + public int getActiveWorkerCount() + { + return activeWorkerCount; + } + public Set getInactiveNodes() { return inactiveNodes;