eu.stratosphere.nephele.executiongraph.ManagementGraphFactory Maven / Gradle / Ivy
/***********************************************************************************************************************
* Copyright (C) 2010-2013 by the Stratosphere project (http://stratosphere.eu)
*
* 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 eu.stratosphere.nephele.executiongraph;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import eu.stratosphere.nephele.instance.AbstractInstance;
import eu.stratosphere.nephele.io.channels.ChannelType;
import eu.stratosphere.nephele.managementgraph.ManagementEdge;
import eu.stratosphere.nephele.managementgraph.ManagementEdgeID;
import eu.stratosphere.nephele.managementgraph.ManagementGate;
import eu.stratosphere.nephele.managementgraph.ManagementGateID;
import eu.stratosphere.nephele.managementgraph.ManagementGraph;
import eu.stratosphere.nephele.managementgraph.ManagementGroupEdge;
import eu.stratosphere.nephele.managementgraph.ManagementGroupVertex;
import eu.stratosphere.nephele.managementgraph.ManagementStage;
import eu.stratosphere.nephele.managementgraph.ManagementVertex;
public class ManagementGraphFactory {
private ManagementGraphFactory() {
}
public static ManagementGraph fromExecutionGraph(ExecutionGraph executionGraph) {
final ManagementGraph managementGraph = new ManagementGraph(executionGraph.getJobID());
final Map stageMap = addExecutionStages(managementGraph, executionGraph);
final Map groupMap = addGroupVertices(stageMap);
addExecutionVertices(groupMap, executionGraph);
return managementGraph;
}
private static Map addExecutionStages(ManagementGraph managementGraph,
ExecutionGraph executionGraph) {
final Map stageMap = new HashMap();
for (int i = 0; i < executionGraph.getNumberOfStages(); i++) {
final ExecutionStage executionStage = executionGraph.getStage(i);
final ManagementStage managementStage = new ManagementStage(managementGraph, i);
stageMap.put(executionStage, managementStage);
}
return stageMap;
}
private static Map addGroupVertices(
Map stageMap) {
final Map groupMap = new HashMap();
// First, create all vertices
Iterator> iterator = stageMap.entrySet().iterator();
while (iterator.hasNext()) {
final Map.Entry entry = iterator.next();
final ExecutionStage executionStage = entry.getKey();
final ManagementStage parent = entry.getValue();
for (int i = 0; i < executionStage.getNumberOfStageMembers(); i++) {
final ExecutionGroupVertex groupVertex = executionStage.getStageMember(i);
final ManagementGroupVertex managementGroupVertex = new ManagementGroupVertex(parent, groupVertex
.getName());
groupMap.put(groupVertex, managementGroupVertex);
}
}
// Second, make sure all edges are created and connected properly
iterator = stageMap.entrySet().iterator();
while (iterator.hasNext()) {
final Map.Entry entry = iterator.next();
final ExecutionStage executionStage = entry.getKey();
for (int i = 0; i < executionStage.getNumberOfStageMembers(); i++) {
final ExecutionGroupVertex sourceVertex = executionStage.getStageMember(i);
final ManagementGroupVertex sourceGroupVertex = groupMap.get(sourceVertex);
for (int j = 0; j < sourceVertex.getNumberOfForwardLinks(); j++) {
final ExecutionGroupEdge edge = sourceVertex.getForwardEdge(j);
final ExecutionGroupVertex targetVertex = edge.getTargetVertex();
final ManagementGroupVertex targetGroupVertex = groupMap.get(targetVertex);
new ManagementGroupEdge(sourceGroupVertex, j, targetGroupVertex, edge.getIndexOfInputGate(), edge
.getChannelType());
}
}
}
return groupMap;
}
private static void addExecutionVertices(Map groupMap,
ExecutionGraph executionGraph) {
ExecutionGraphIterator iterator = new ExecutionGraphIterator(executionGraph, true);
final Map vertexMap = new HashMap();
final Map gateMap = new HashMap();
while (iterator.hasNext()) {
final ExecutionVertex ev = iterator.next();
final ManagementGroupVertex parent = groupMap.get(ev.getGroupVertex());
final AbstractInstance instance = ev.getAllocatedResource().getInstance();
final ManagementVertex managementVertex = new ManagementVertex(
parent,
ev.getID().toManagementVertexID(),
(instance.getInstanceConnectionInfo() != null) ? instance.getInstanceConnectionInfo().toString() : instance.toString(),
instance.getType().toString(),
ev.getIndexInVertexGroup()
);
managementVertex.setExecutionState(ev.getExecutionState());
vertexMap.put(ev, managementVertex);
for (int i = 0; i < ev.getNumberOfOutputGates(); i++) {
final ExecutionGate outputGate = ev.getOutputGate(i);
final ManagementGate managementGate = new ManagementGate(managementVertex, new ManagementGateID(), i,
false);
gateMap.put(outputGate, managementGate);
}
for (int i = 0; i < ev.getNumberOfInputGates(); i++) {
final ExecutionGate inputGate = ev.getInputGate(i);
final ManagementGate managementGate = new ManagementGate(managementVertex, new ManagementGateID(), i,
true);
gateMap.put(inputGate, managementGate);
}
}
iterator = new ExecutionGraphIterator(executionGraph, true);
// Setup connections
while (iterator.hasNext()) {
final ExecutionVertex source = iterator.next();
for (int i = 0; i < source.getNumberOfOutputGates(); i++) {
final ExecutionGate outputGate = source.getOutputGate(i);
final ManagementGate manangementOutputGate = gateMap.get(outputGate);
final ChannelType channelType = outputGate.getChannelType();
for (int j = 0; j < outputGate.getNumberOfEdges(); j++) {
final ExecutionEdge outputChannel = outputGate.getEdge(j);
final ManagementGate managementInputGate = gateMap.get(outputChannel.getInputGate());
final ManagementEdgeID sourceEdgeID = new ManagementEdgeID(outputChannel.getOutputChannelID());
final ManagementEdgeID targetEdgeID = new ManagementEdgeID(outputChannel.getInputChannelID());
new ManagementEdge(sourceEdgeID, targetEdgeID, manangementOutputGate, j, managementInputGate,
outputChannel.getInputGateIndex(), channelType);
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy