/**
* 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.tez.test.dag;
import org.apache.hadoop.conf.Configuration;
import org.apache.tez.common.TezUtils;
import org.apache.tez.dag.api.DAG;
import org.apache.tez.dag.api.Vertex;
import org.apache.tez.dag.api.EdgeProperty.DataMovementType;
import org.apache.tez.test.TestProcessor;
/**
* A DAG with vertices divided into 6 levels.
* Vertex name is "l<level number>v<vertex number>". Level/vertex numbers start at 1.
* Each vertex has failing processor and failing inputs. The constructor can accept Tez Configuration to indicate failing patterns.
*
* DAG is shown with a diagram below.
* Each vertex has its degree of parallelism indicated in a bracket following its name.
* Each edge annotates with data movement (s = scatter/gather, b = broadcast)
*
* l1v1(1) l1v2(2) l1v3(3) l1v4(2)
* |s |s |s |b
* | | | |
* l2v1(1) l2v2(3) l2v3(2) l2v4(3)
* \s /s \b |s /s
* \ / \ | /
* l3v1(4) l3v2(4)
* \s /s
* \ /
* l4v1 (10)
* /s |s \s
* / | \
* l5v1(2) l5v2(4) l5v3(1)
* \s |s /s
* \ | /
* l6v1(4)
*
*/
public class SixLevelsFailingDAG extends ThreeLevelsFailingDAG {
protected static Vertex l4v1;
protected static Vertex l5v1, l5v2, l5v3;
protected static Vertex l6v1;
protected static void addDAGVerticesAndEdges() {
ThreeLevelsFailingDAG.addDAGVerticesAndEdges();
l4v1 = Vertex.create("l4v1", TestProcessor.getProcDesc(payload), 10, defaultResource);
dag.addVertex(l4v1);
addEdge(l3v1, l4v1, DataMovementType.SCATTER_GATHER);
addEdge(l3v2, l4v1, DataMovementType.SCATTER_GATHER);
l5v1 = Vertex.create("l5v1", TestProcessor.getProcDesc(payload), 2, defaultResource);
dag.addVertex(l5v1);
addEdge(l4v1, l5v1, DataMovementType.SCATTER_GATHER);
l5v2 = Vertex.create("l5v2", TestProcessor.getProcDesc(payload), 4, defaultResource);
dag.addVertex(l5v2);
addEdge(l4v1, l5v2, DataMovementType.SCATTER_GATHER);
l5v3 = Vertex.create("l5v3", TestProcessor.getProcDesc(payload), 1, defaultResource);
dag.addVertex(l5v3);
addEdge(l4v1, l5v3, DataMovementType.SCATTER_GATHER);
l6v1 = Vertex.create("l6v1", TestProcessor.getProcDesc(payload), 4, defaultResource);
dag.addVertex(l6v1);
addEdge(l5v1, l6v1, DataMovementType.SCATTER_GATHER);
addEdge(l5v2, l6v1, DataMovementType.SCATTER_GATHER);
addEdge(l5v3, l6v1, DataMovementType.SCATTER_GATHER);
}
public static DAG createDAG(String name,
Configuration conf) throws Exception {
if (conf != null) {
payload = TezUtils.createUserPayloadFromConf(conf);
}
dag = DAG.create(name);
addDAGVerticesAndEdges();
return dag;
}
public static DAG createDAG(Configuration conf) throws Exception {
return createDAG("SixLevelsFailingDAG", conf);
}
}