Search in sources :

Example 1 with UnclosedBranchDescriptor

use of org.apache.flink.optimizer.dag.OptimizerNode.UnclosedBranchDescriptor in project flink by apache.

the class PlanNode method setBroadcastInputs.

/**
	 * Sets a list of all broadcast inputs attached to this node.
	 */
public void setBroadcastInputs(List<NamedChannel> broadcastInputs) {
    if (broadcastInputs != null) {
        this.broadcastInputs = broadcastInputs;
        // update the branch map
        for (NamedChannel nc : broadcastInputs) {
            PlanNode source = nc.getSource();
            mergeBranchPlanMaps(branchPlan, source.branchPlan);
        }
    }
    // do a sanity check that if we are branching, we have now candidates for each branch point
    if (this.template.hasUnclosedBranches()) {
        if (this.branchPlan == null) {
            throw new CompilerException("Branching and rejoining logic did not find a candidate for the branching point.");
        }
        for (UnclosedBranchDescriptor uc : this.template.getOpenBranches()) {
            OptimizerNode brancher = uc.getBranchingNode();
            if (this.branchPlan.get(brancher) == null) {
                throw new CompilerException("Branching and rejoining logic did not find a candidate for the branching point.");
            }
        }
    }
}
Also used : OptimizerNode(org.apache.flink.optimizer.dag.OptimizerNode) CompilerException(org.apache.flink.optimizer.CompilerException) UnclosedBranchDescriptor(org.apache.flink.optimizer.dag.OptimizerNode.UnclosedBranchDescriptor)

Example 2 with UnclosedBranchDescriptor

use of org.apache.flink.optimizer.dag.OptimizerNode.UnclosedBranchDescriptor in project flink by apache.

the class PlanNode method mergeBranchPlanMaps.

protected void mergeBranchPlanMaps(Map<OptimizerNode, PlanNode> branchPlan1, Map<OptimizerNode, PlanNode> branchPlan2) {
    // merge the branchPlan maps according the template's uncloseBranchesStack
    if (this.template.hasUnclosedBranches()) {
        if (this.branchPlan == null) {
            this.branchPlan = new HashMap<OptimizerNode, PlanNode>(8);
        }
        for (UnclosedBranchDescriptor uc : this.template.getOpenBranches()) {
            OptimizerNode brancher = uc.getBranchingNode();
            PlanNode selectedCandidate = null;
            if (branchPlan1 != null) {
                // predecessor 1 has branching children, see if it got the branch we are looking for
                selectedCandidate = branchPlan1.get(brancher);
            }
            if (selectedCandidate == null && branchPlan2 != null) {
                // predecessor 2 has branching children, see if it got the branch we are looking for
                selectedCandidate = branchPlan2.get(brancher);
            }
            // it may be that the branch candidate is only found once the broadcast variables are set
            if (selectedCandidate != null) {
                this.branchPlan.put(brancher, selectedCandidate);
            }
        }
    }
}
Also used : OptimizerNode(org.apache.flink.optimizer.dag.OptimizerNode) UnclosedBranchDescriptor(org.apache.flink.optimizer.dag.OptimizerNode.UnclosedBranchDescriptor)

Aggregations

OptimizerNode (org.apache.flink.optimizer.dag.OptimizerNode)2 UnclosedBranchDescriptor (org.apache.flink.optimizer.dag.OptimizerNode.UnclosedBranchDescriptor)2 CompilerException (org.apache.flink.optimizer.CompilerException)1