All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.yarn.am.allocate.AllocationGroup Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2014-2016 the original author or authors.
 *
 * 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 org.springframework.yarn.am.allocate;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * Allocation group is keeping allocation values and allocation trackers together.
 *
 * @author Janne Valkealahti
 *
 */
class AllocationGroup {

	public static final String GROUP_ANY = "any";

	public static final String GROUP_HOST = "host";

	public static final String GROUP_RACK = "rack";

	private final Map idToPriMap = new HashMap();

	private final Map priToIdMap = new HashMap();

	private final Map trackers = new HashMap();

	private final Integer basePriority;

	private final String id;

	private ContainerAllocationValues containerAllocationValues;

	/**
	 * Instantiates a new allocation group.
	 *
	 * @param basePriority the base priority
	 * @param id the group identifier
	 */
	public AllocationGroup(Integer basePriority, String id) {
		this.basePriority = basePriority;
		this.id = id;
	}

	/**
	 * Gets the base priority.
	 *
	 * @return the base priority
	 */
	public Integer getBasePriority() {
		return basePriority;
	}

	/**
	 * Adds the priority mapped with identifier.
	 *
	 * @param priorityId the priority id
	 * @param priority the priority
	 */
	public void addPriority(String priorityId, Integer priority) {
		idToPriMap.put(priorityId, priority);
		priToIdMap.put(priority, priorityId);
	}

	/**
	 * Gets the priority by its mapped id.
	 *
	 * @param priorityId the priority id
	 * @return the priority
	 */
	public Integer getPriority(String priorityId) {
		return idToPriMap.get(priorityId);
	}

	/**
	 * Belongs.
	 *
	 * @param priority the priority
	 * @return true, if successful
	 */
	public boolean belongs(int priority) {
		return basePriority.intValue() == priority || idToPriMap.values().contains(priority);
	}

	/**
	 * Gets the id.
	 *
	 * @return the id
	 */
	public String getId() {
		return id;
	}

	/**
	 * Sets the container allocation values.
	 *
	 * @param containerAllocationValues the new container allocation values
	 */
	public void setContainerAllocationValues(ContainerAllocationValues containerAllocationValues) {
		this.containerAllocationValues = containerAllocationValues;
	}

	/**
	 * Gets the container allocation values.
	 *
	 * @return the container allocation values
	 */
	public ContainerAllocationValues getContainerAllocationValues() {
		return containerAllocationValues;
	}

	/**
	 * Sets the allocate count tracker.
	 *
	 * @param subId the sub id
	 * @param defaultAllocateCountTracker the default allocate count tracker
	 */
	public void setAllocateCountTracker(String subId, DefaultAllocateCountTracker defaultAllocateCountTracker) {
		trackers.put(subId, defaultAllocateCountTracker);
	}

	/**
	 * Gets the allocate count tracker.
	 *
	 * @param subId the sub id
	 * @return the allocate count tracker
	 */
	public DefaultAllocateCountTracker getAllocateCountTracker(String subId) {
		return trackers.get(subId);
	}

	/**
	 * Gets the allocate count trackers.
	 *
	 * @return the allocate count trackers
	 */
	public Collection getAllocateCountTrackers() {
		return trackers.values();
	}

	/**
	 * Gets the allocate count tracker.
	 *
	 * @param priority the priority
	 * @return the allocate count tracker
	 */
	public DefaultAllocateCountTracker getAllocateCountTracker(Integer priority) {
		return trackers.get(priToIdMap.get(priority));
	}

	public static class ContainerAllocationValues {
		int priority = 0;
		String labelExpression;
		int virtualcores = 1;
		int memory = 64;
		boolean locality = false;
		public ContainerAllocationValues(Integer priority, String labelExpression, Integer virtualcores, Integer memory, Boolean locality) {
			if (priority != null) {
				this.priority = priority;
			}
			this.labelExpression = labelExpression;
			if (virtualcores != null) {
				this.virtualcores = virtualcores;
			}
			if (memory != null) {
				this.memory = memory;
			}
			if (locality != null) {
				this.locality = locality;
			}
		}

		@Override
		public String toString() {
			return "ContainerAllocationValues [priority=" + priority + ", labelExpression=" + labelExpression + ", virtualcores="
					+ virtualcores + ", memory=" + memory + ", locality=" + locality + "]";
		}

	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy