package com.scaleunlimited.cascading; import java.util.List; import cascading.flow.Flow; import cascading.flow.FlowStep; import cascading.flow.planner.BaseFlowStep; import cascading.stats.CascadingStats.Status; import cascading.stats.FlowStepStats; public class FlowUtils { /** * Work around a bug where Cascading throws an exception if we try to stop a flow * that isn't yet fully started (state == PENDING). * * @param flow * @throws InterruptedException */ public static void safeStop(Flow flow) { boolean potentialBug = flow.getFlowStats().getStatus() == Status.PENDING; try { flow.stop(); } catch (IllegalStateException e) { if (potentialBug) { while (flow.getFlowStats().getStatus() == Status.PENDING) { try { Thread.sleep(1000); } catch (InterruptedException e1) { Thread.currentThread().interrupt(); } } flow.stop(); } else { throw e; } } } public static void nameFlowSteps(Flow flow) { List<FlowStep> steps = flow.getFlowSteps(); for (FlowStep step : steps) { if (step instanceof BaseFlowStep) { BaseFlowStep baseStep = (BaseFlowStep)step; StepUtils.nameFlowStep(baseStep); } } } }