/* * 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.flink.runtime.executiongraph.failover; import org.apache.flink.runtime.executiongraph.Execution; import org.apache.flink.runtime.executiongraph.ExecutionGraph; import org.apache.flink.runtime.executiongraph.ExecutionJobVertex; import java.util.List; import static org.apache.flink.util.Preconditions.checkNotNull; /** * Simple failover strategy that triggers a restart of all tasks in the * execution graph, via {@link ExecutionGraph#failGlobal(Throwable)}. */ public class RestartAllStrategy extends FailoverStrategy { /** The execution graph to recover */ private final ExecutionGraph executionGraph; /** * Creates a new failover strategy that recovers from failures by restarting all tasks * of the execution graph. * * @param executionGraph The execution graph to handle. */ public RestartAllStrategy(ExecutionGraph executionGraph) { this.executionGraph = checkNotNull(executionGraph); } // ------------------------------------------------------------------------ @Override public void onTaskFailure(Execution taskExecution, Throwable cause) { // this strategy makes every task failure a global failure executionGraph.failGlobal(cause); } @Override public void notifyNewVertices(List<ExecutionJobVertex> newJobVerticesTopological) { // nothing to do } @Override public String getStrategyName() { return "full graph restart"; } // ------------------------------------------------------------------------ // factory // ------------------------------------------------------------------------ /** * Factory that instantiates the RestartAllStrategy. */ public static class Factory implements FailoverStrategy.Factory { @Override public FailoverStrategy create(ExecutionGraph executionGraph) { return new RestartAllStrategy(executionGraph); } } }