blob: afca8f934978f1d52dff2c76d39988b394e4a3c3 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.hadoop.yarn.server.resourcemanager.reservation;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.yarn.api.records.ReservationDefinition;
public abstract class ReservationSchedulerConfiguration extends Configuration {
@InterfaceAudience.Private
public static final long DEFAULT_RESERVATION_WINDOW = 24*60*60*1000; // 1 day in msec
@InterfaceAudience.Private
public static final String DEFAULT_RESERVATION_ADMISSION_POLICY =
"org.apache.hadoop.yarn.server.resourcemanager.reservation.CapacityOverTimePolicy";
@InterfaceAudience.Private
public static final String DEFAULT_RESERVATION_AGENT_NAME =
"org.apache.hadoop.yarn.server.resourcemanager.reservation.planning.AlignedPlannerWithGreedy";
@InterfaceAudience.Private
public static final String DEFAULT_RESERVATION_PLANNER_NAME =
"org.apache.hadoop.yarn.server.resourcemanager.reservation.planning.SimpleCapacityReplanner";
@InterfaceAudience.Private
public static final boolean DEFAULT_RESERVATION_MOVE_ON_EXPIRY = true;
// default to 1h lookahead enforcement
@InterfaceAudience.Private
public static final long DEFAULT_RESERVATION_ENFORCEMENT_WINDOW = 60*60*1000;
// 1 hour
@InterfaceAudience.Private
public static final boolean DEFAULT_SHOW_RESERVATIONS_AS_QUEUES = false;
@InterfaceAudience.Private
public static final float DEFAULT_CAPACITY_OVER_TIME_MULTIPLIER = 1;
public ReservationSchedulerConfiguration() { super(); }
public ReservationSchedulerConfiguration(
Configuration configuration) {
super(configuration);
}
/**
* Checks if the queue participates in reservation based scheduling
* @param queue name of the queue
* @return true if the queue participates in reservation based scheduling
*/
public abstract boolean isReservable(String queue);
/**
* Gets the length of time in milliseconds for which the {@link SharingPolicy}
* checks for validity
* @param queue name of the queue
* @return length in time in milliseconds for which to check the
* {@link SharingPolicy}
*/
public long getReservationWindow(String queue) {
return DEFAULT_RESERVATION_WINDOW;
}
/**
* Gets the average allowed capacity which will aggregated over the
* {@link ReservationSchedulerConfiguration#getReservationWindow} by the
* the {@link SharingPolicy} to check aggregate used capacity
* @param queue name of the queue
* @return average capacity allowed by the {@link SharingPolicy}
*/
public float getAverageCapacity(String queue) {
return DEFAULT_CAPACITY_OVER_TIME_MULTIPLIER;
}
/**
* Gets the maximum capacity at any time that the {@link SharingPolicy} allows
* @param queue name of the queue
* @return maximum allowed capacity at any time
*/
public float getInstantaneousMaxCapacity(String queue) {
return DEFAULT_CAPACITY_OVER_TIME_MULTIPLIER;
}
/**
* Gets the name of the {@link SharingPolicy} class associated with the queue
* @param queue name of the queue
* @return the class name of the {@link SharingPolicy}
*/
public String getReservationAdmissionPolicy(String queue) {
return DEFAULT_RESERVATION_ADMISSION_POLICY;
}
/**
* Gets the name of the {@code ReservationAgent} class associated with the
* queue
* @param queue name of the queue
* @return the class name of the {@code ReservationAgent}
*/
public String getReservationAgent(String queue) {
return DEFAULT_RESERVATION_AGENT_NAME;
}
/**
* Checks whether the reservation queues be hidden or visible
* @param queuePath name of the queue
* @return true if reservation queues should be visible
*/
public boolean getShowReservationAsQueues(String queuePath) {
return DEFAULT_SHOW_RESERVATIONS_AS_QUEUES;
}
/**
* Gets the name of the {@code Planner} class associated with the
* queue
* @param queue name of the queue
* @return the class name of the {@code Planner}
*/
public String getReplanner(String queue) {
return DEFAULT_RESERVATION_PLANNER_NAME;
}
/**
* Gets whether the applications should be killed or moved to the parent queue
* when the {@link ReservationDefinition} expires
* @param queue name of the queue
* @return true if application should be moved, false if they need to be
* killed
*/
public boolean getMoveOnExpiry(String queue) {
return DEFAULT_RESERVATION_MOVE_ON_EXPIRY;
}
/**
* Gets the time in milliseconds for which the {@code Planner} will verify
* the {@link Plan}s satisfy the constraints
* @param queue name of the queue
* @return the time in milliseconds for which to check constraints
*/
public long getEnforcementWindow(String queue) {
return DEFAULT_RESERVATION_ENFORCEMENT_WINDOW;
}
}