public PlannerException( PlanPhase phase, Rule rule, ElementGraph elementGraph, Throwable throwable ) { super( "phase: " + phase + ", failed on rule: " + rule.getRuleName() + ( elementGraph != null ? ", see attached source element-graph" : "" ), throwable ); this.elementGraph = elementGraph; }
public PlannerException( PlanPhase phase, Rule rule, Throwable throwable ) { super( "phase: " + phase + ", failed on rule: " + rule.getRuleName(), throwable ); }
public PlannerException( Rule rule, Exception exception ) { super( "failed on rule: " + rule.getRuleName(), exception ); }
public boolean hasRule( String ruleName ) { for( Map.Entry<PlanPhase, LinkedList<Rule>> entry : rules.entrySet() ) { for( Rule rule : entry.getValue() ) { if( rule.getRuleName().equals( ruleName ) ) return true; } } return false; }
public PlannerException( RuleRegistry registry, PlanPhase phase, Rule rule, ElementGraph elementGraph, Throwable throwable ) { super( "registry: " + registry.getName() + ", phase: " + phase + ", failed on rule: " + rule.getRuleName() + ( elementGraph != null ? ", see attached source element-graph" : "" ), throwable ); this.elementGraph = elementGraph; }
public PlannerException( RuleRegistry registry, PlanPhase phase, Rule rule, Throwable throwable ) { super( "registry: " + registry.getName() + ", phase: " + phase + ", failed on rule: " + rule.getRuleName(), throwable ); }
public void setRuleDuration( Rule rule, long begin, long end ) { Map<String, Long> durations = ruleDurations.get( rule.getRulePhase() ); if( durations == null ) { durations = new LinkedHashMap<>(); ruleDurations.put( rule.getRulePhase(), durations ); } if( durations.containsKey( rule.getRuleName() ) ) throw new IllegalStateException( "duplicate rule found: " + rule.getRuleName() ); long duration = end - begin; // print these as we go if( duration > THRESHOLD_SECONDS * 1000 ) LOG.info( "rule: {}, took longer than {} seconds: {}", rule.getRuleName(), THRESHOLD_SECONDS, formatDurationFromMillis( duration ) ); durations.put( rule.getRuleName(), duration ); }
public boolean addRule( Rule rule ) { if( rule.getRulePhase() == null ) throw new IllegalArgumentException( "rule must have a rule phase: " + rule.getRuleName() ); return rules.get( rule.getRulePhase() ).add( rule ); }
@Override public String getRuleName() { if( getGraphAssert() instanceof Rule ) return ( (Rule) getGraphAssert() ).getRuleName(); return "none"; }
public String getRuleName() { if( getGraphTransform() instanceof Rule ) return ( (Rule) getGraphTransform() ).getRuleName(); return "none"; }
protected void performMutation( PlannerContext plannerContext, RuleResult ruleResult, PlanPhase phase, Rule rule ) { if( rule instanceof GraphTransformer ) performTransform( plannerContext, ruleResult, phase, (GraphTransformer) rule ); else if( rule instanceof GraphAssert ) performAssertion( plannerContext, ruleResult, phase, (GraphAssert) rule ); else throw new PlannerException( "unexpected rule: " + rule.getRuleName() ); }
private void performPartition( PlannerContext plannerContext, RuleResult ruleResult, PlanPhase phase, Rule rule ) { if( !( rule instanceof RulePartitioner ) ) throw new PlannerException( "unexpected rule: " + rule.getRuleName() ); RulePartitioner partitioner = (RulePartitioner) rule; if( partitioner.getPartitionSource() == RulePartitioner.PartitionSource.PartitionParent ) handleParentPartitioning( plannerContext, ruleResult, phase, partitioner ); else if( partitioner.getPartitionSource() == RulePartitioner.PartitionSource.PartitionCurrent ) handleCurrentPartitioning( plannerContext, ruleResult, phase, partitioner ); else throw new IllegalStateException( "unknown partitioning type: " + partitioner.getPartitionSource() ); }
private void performTransform( PlannerContext plannerContext, RuleResult ruleResult, PlanPhase phase, GraphTransformer transformer ) plannerContext.getLogger().logDebug( "applying transform: {}", ( (Rule) transformer ).getRuleName() );
private void performAssertion( PlannerContext plannerContext, RuleResult ruleResult, PlanPhase phase, GraphAssert asserter ) { plannerContext.getLogger().logDebug( "applying assertion: {}", ( (Rule) asserter ).getRuleName() ); Map<ElementGraph, List<? extends ElementGraph>> levelResults = ruleResult.getLevelResults( phase.getLevel() ); for( Map.Entry<ElementGraph, List<? extends ElementGraph>> entry : levelResults.entrySet() ) { ElementGraph parent = entry.getKey(); // null for root case List<? extends ElementGraph> children = entry.getValue(); for( ElementGraph child : children ) { Asserted asserted; try { asserted = asserter.assertion( plannerContext, child ); } catch( Throwable throwable ) { throw new PlannerException( registry, phase, (Rule) asserter, child, throwable ); } writeTransformTrace( ruleResult, phase, (Rule) asserter, parent, child, asserted ); FlowElement primary = asserted.getFirstAnchor(); if( primary == null ) continue; if( asserted.getAssertionType() == GraphAssert.AssertionType.Unsupported ) throw new UnsupportedPlanException( asserted.getFirstAnchor(), asserted.getMessage() ); else // only two options throw new PlannerException( asserted.getFirstAnchor(), asserted.getMessage() ); } } }