package org.apache.hadoop.corona;
import java.io.IOException;
import java.util.Collection;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.metrics.ContextFactory;
import org.apache.hadoop.metrics.spi.NoEmitMetricsContext;
import org.apache.hadoop.util.HostsFileReader;
public class ClusterManagerTestable extends ClusterManager {
FakeConfigManager configManager = new FakeConfigManager();
public static class NodeManagerTestable extends NodeManager {
public NodeManagerTestable(
ClusterManager clusterManager, CoronaConf conf) throws IOException {
super(clusterManager,
new HostsFileReader(conf.getHostsFile(), conf.getExcludesFile()));
}
}
public static class SchedulerTestable extends Scheduler {
public SchedulerTestable(NodeManager nodeManager,
SessionManager sessionManager, SessionNotifier sessionNotifier,
Collection<ResourceType> types, ClusterManagerMetrics metrics,
ConfigManager configManager, CoronaConf conf) {
super(nodeManager, sessionManager, sessionNotifier, types, metrics, conf,
configManager);
}
}
public static class SessionManagerTestable extends SessionManager {
public SessionManagerTestable(ClusterManager clusterManager) {
super(clusterManager);
}
}
public ClusterManagerTestable(Configuration conf) throws IOException {
this(new CoronaConf(conf));
}
public ClusterManagerTestable(CoronaConf conf) throws IOException {
this(conf, false);
}
public ClusterManagerTestable(CoronaConf conf, boolean callbackSession) throws IOException {
this.conf = conf;
initLegalTypes();
ContextFactory.resetFactory();
setNoEmitMetricsContext();
metrics = new ClusterManagerMetrics(getTypes());
sessionManager = new SessionManagerTestable(this);
nodeManager = new NodeManagerTestable(this, conf);
if (callbackSession) {
sessionNotifier = new CallbackSessionNotifier(sessionManager, this, metrics);
} else {
sessionNotifier = new FakeSessionNotifier(sessionManager, this, metrics);
}
sessionHistoryManager = new SessionHistoryManager();
sessionHistoryManager.setConf(conf);
configManager = new FakeConfigManager();
scheduler = new SchedulerTestable(nodeManager, sessionManager,
sessionNotifier, getTypes(), metrics, configManager, conf);
scheduler.setConf(conf);
scheduler.start();
sessionManager.setConf(conf);
nodeManager.setConf(conf);
startTime = clock.getTime();
}
@Override
public SessionManagerTestable getSessionManager() {
return (SessionManagerTestable)sessionManager;
}
public FakeConfigManager getConfigManager() {
return this.configManager;
}
private void setNoEmitMetricsContext() throws IOException {
ContextFactory factory = ContextFactory.getFactory();
factory.setAttribute(ClusterManagerMetrics.CONTEXT_NAME + ".class",
NoEmitMetricsContext.class.getName());
}
}