package org.apache.hadoop.corona; import java.util.HashMap; import java.util.Map; /** * A fake {@link ConfigManager} that allows set the configuration manually */ public class FakeConfigManager extends ConfigManager { private final Map<String, Object> config = new HashMap<String, Object>(); private static final String SEPARATOR = "" + ((char)1); private enum PROPERTY { MAX, MIN, WEIGHT, PREEMPTED_TASKS_MAX_RUNNING_TIME, COMPARATOR, SHARE_STARVING_RATIO, MIN_PREEMPT_PERIOD, STARVING_TIME_FOR_SHARE, STARVING_TIME_FOR_MIN, LOCALITY_WAIT; final private static String POSTFIX = "" + ((char)2); @Override public String toString() { return super.toString() + POSTFIX; } } public FakeConfigManager() { } @Override public void start() { } @Override public void close() { } public void setMaximum(PoolInfo poolInfo, String type, int val) { String key = PROPERTY.MAX + PoolInfo.createStringFromPoolInfo(poolInfo) + SEPARATOR + type; config.put(key, val); } @Override public int getPoolMaximum(PoolInfo poolInfo, ResourceType type) { String key = PROPERTY.MAX + PoolInfo.createStringFromPoolInfo(poolInfo) + SEPARATOR + type; if (!config.containsKey(key)) { return Integer.MAX_VALUE; } return (Integer)config.get(key); } public void setMinimum(PoolInfo poolInfo, ResourceType type, int val) { String key = PROPERTY.MIN + PoolInfo.createStringFromPoolInfo(poolInfo) + SEPARATOR + type; config.put(key, val); } @Override public int getPoolMinimum(PoolInfo poolInfo, ResourceType type) { String key = PROPERTY.MIN + PoolInfo.createStringFromPoolInfo(poolInfo) + SEPARATOR + type; if (!config.containsKey(key)) { return 0; } return (Integer)config.get(key); } public void setWeight(PoolInfo poolInfo, double val) { String key = PROPERTY.WEIGHT + PoolInfo.createStringFromPoolInfo(poolInfo); config.put(key, val); } @Override public double getWeight(PoolInfo poolInfo) { String key = PROPERTY.WEIGHT + PoolInfo.createStringFromPoolInfo(poolInfo); if (!config.containsKey(key)) { return 1.0; } return (Integer)config.get(key); } public void setComparator(PoolInfo poolInfo, ScheduleComparator val) { String key = PROPERTY.COMPARATOR + PoolInfo.createStringFromPoolInfo(poolInfo); config.put(key, val); } @Override public ScheduleComparator getPoolComparator(PoolInfo poolInfo) { String key = PROPERTY.COMPARATOR + PoolInfo.createStringFromPoolInfo(poolInfo); if (!config.containsKey(key)) { return ScheduleComparator.FIFO; } return (ScheduleComparator)config.get(key); } public void setPreemptedTaskMaxRunningTime(long val) { config.put(PROPERTY.PREEMPTED_TASKS_MAX_RUNNING_TIME.toString(), val); } @Override public long getPreemptedTaskMaxRunningTime() { String key = PROPERTY.PREEMPTED_TASKS_MAX_RUNNING_TIME.toString(); if (!config.containsKey(key)) { return Long.MAX_VALUE; } return (Long)config.get(key); } public void setShareStarvingRatio(double val) { config.put(PROPERTY.SHARE_STARVING_RATIO.toString(), val); } @Override public double getShareStarvingRatio() { String key = PROPERTY.SHARE_STARVING_RATIO.toString(); if (!config.containsKey(key)) { return 0.5; } return (Double)config.get(key); } public void setMinPreemptPeriod(long val) { config.put(PROPERTY.MIN_PREEMPT_PERIOD.toString(), val); } @Override public long getMinPreemptPeriod() { String key = PROPERTY.MIN_PREEMPT_PERIOD.toString(); if (!config.containsKey(key)) { return ConfigManager.DEFAULT_MIN_PREEMPT_PERIOD; } return (Long) config.get(key); } public void setStarvingTimeForShare(long val) { config.put(PROPERTY.STARVING_TIME_FOR_SHARE.toString(), val); } @Override public long getStarvingTimeForShare() { String key = PROPERTY.STARVING_TIME_FOR_SHARE.toString(); if (!config.containsKey(key)) { return ConfigManager.DEFAULT_STARVING_TIME_FOR_SHARE; } return (Long)config.get(key); } public void setStarvingTimeForMinimum(long val) { config.put(PROPERTY.STARVING_TIME_FOR_MIN.toString(), val); } @Override public long getStarvingTimeForMinimum() { String key = PROPERTY.STARVING_TIME_FOR_MIN.toString(); if (!config.containsKey(key)) { return ConfigManager.DEFAULT_STARVING_TIME_FOR_MINIMUM; } return (Long)config.get(key); } public void setLocalityWait(String type, LocalityLevel level, long val) { String key = PROPERTY.LOCALITY_WAIT + type + SEPARATOR + level; config.put(key, val); } @Override public long getLocalityWait(ResourceType type, LocalityLevel level) { String key = PROPERTY.LOCALITY_WAIT + type.toString() + SEPARATOR + level; if (!config.containsKey(key)) { return 0L; } return (Long)config.get(key); } }