in common/src/main/java/org/apache/nemo/common/ir/IRDAGChecker.java [90:132]
public CheckerResult doCheck(final DAG<IRVertex, IREdge> underlyingDAG) {
// Traverse the DAG once to run all local checkers
for (final IRVertex v : underlyingDAG.getTopologicalSort()) {
// Run per-vertex checkers
for (final SingleVertexChecker checker : singleVertexCheckerList) {
final CheckerResult result = checker.check(v);
if (!result.isPassed()) {
return result;
}
}
final List<IREdge> inEdges = underlyingDAG.getIncomingEdgesOf(v);
final List<IREdge> outEdges = underlyingDAG.getOutgoingEdgesOf(v);
// Run per-edge checkers
for (final IREdge inEdge : inEdges) {
for (final SingleEdgeChecker checker : singleEdgeCheckerList) {
final CheckerResult result = checker.check(inEdge);
if (!result.isPassed()) {
return result;
}
}
}
// Run neighbor checkers
for (final NeighborChecker checker : neighborCheckerList) {
final CheckerResult result = checker.check(v, inEdges, outEdges);
if (!result.isPassed()) {
return result;
}
}
}
// Run global checkers
for (final GlobalDAGChecker checker : globalDAGCheckerList) {
final CheckerResult result = checker.check(underlyingDAG);
if (!result.isPassed()) {
return result;
}
}
return success();
}