/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.facebook.presto.spi.resourceGroups; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import io.airlift.units.DataSize; import java.util.List; import java.util.Optional; import static java.util.Collections.emptyList; import static java.util.Collections.unmodifiableList; import static java.util.Objects.requireNonNull; public class ResourceGroupInfo { private final ResourceGroupId id; private final DataSize softMemoryLimit; private final int maxRunningQueries; private final int maxQueuedQueries; private final ResourceGroupState state; private final int numEligibleSubGroups; private final DataSize memoryUsage; private final int numAggregatedRunningQueries; private final int numAggregatedQueuedQueries; private final List<ResourceGroupInfo> subGroups; @JsonCreator public ResourceGroupInfo( @JsonProperty("id") ResourceGroupId id, @JsonProperty("softMemoryLimit") DataSize softMemoryLimit, @JsonProperty("maxRunningQueries") int maxRunningQueries, @JsonProperty("maxQueuedQueries") int maxQueuedQueries, @JsonProperty("state") ResourceGroupState state, @JsonProperty("numEligibleSubGroups") int numEligibleSubGroups, @JsonProperty("memoryUsage") DataSize memoryUsage, @JsonProperty("numAggregatedRunningQueries") int numAggregatedRunningQueries, @JsonProperty("numAggregatedQueuedQueries") int numAggregatedQueuedQueries) { this(id, softMemoryLimit, maxRunningQueries, maxQueuedQueries, state, numEligibleSubGroups, memoryUsage, numAggregatedRunningQueries, numAggregatedQueuedQueries, emptyList()); } public ResourceGroupInfo( ResourceGroupId id, DataSize softMemoryLimit, int maxRunningQueries, int maxQueuedQueries, ResourceGroupState state, int numEligibleSubGroups, DataSize memoryUsage, int numAggregatedRunningQueries, int numAggregatedQueuedQueries, List<ResourceGroupInfo> subGroups) { this.id = requireNonNull(id, "id is null"); this.softMemoryLimit = requireNonNull(softMemoryLimit, "softMemoryLimit is null"); this.maxRunningQueries = maxRunningQueries; this.maxQueuedQueries = maxQueuedQueries; this.state = requireNonNull(state, "state is null"); this.numEligibleSubGroups = numEligibleSubGroups; this.memoryUsage = requireNonNull(memoryUsage, "memoryUsage is null"); this.numAggregatedRunningQueries = numAggregatedRunningQueries; this.numAggregatedQueuedQueries = numAggregatedQueuedQueries; this.subGroups = unmodifiableList(requireNonNull(subGroups, "subGroups is null")); } @JsonProperty public ResourceGroupId getId() { return id; } @JsonProperty public DataSize getSoftMemoryLimit() { return softMemoryLimit; } @JsonProperty public int getMaxRunningQueries() { return maxRunningQueries; } @JsonProperty public int getMaxQueuedQueries() { return maxQueuedQueries; } public List<ResourceGroupInfo> getSubGroups() { return subGroups; } @JsonProperty public DataSize getMemoryUsage() { return memoryUsage; } public Optional<ResourceGroupInfo> getSubGroup(ResourceGroupId resourceGroupId) { return subGroups.stream(). filter(subGroup -> subGroup.getId().equals(resourceGroupId) || subGroup.getId().isAncestorOf(resourceGroupId)) .findFirst(); } @JsonProperty public int getNumAggregatedRunningQueries() { return numAggregatedRunningQueries; } @JsonProperty public int getNumAggregatedQueuedQueries() { return numAggregatedQueuedQueries; } @JsonProperty public ResourceGroupState getState() { return state; } @JsonProperty public int getNumEligibleSubGroups() { return numEligibleSubGroups; } public ResourceGroupInfo createSingleNodeInfo() { return new ResourceGroupInfo( getId(), getSoftMemoryLimit(), getMaxRunningQueries(), getMaxQueuedQueries(), getState(), getNumEligibleSubGroups(), getMemoryUsage(), getNumAggregatedRunningQueries(), getNumAggregatedQueuedQueries()); } }