| /* |
| * 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.api.common; |
| |
| import org.apache.flink.annotation.Internal; |
| |
| import static org.apache.flink.util.Preconditions.checkNotNull; |
| import static org.apache.flink.util.Preconditions.checkArgument; |
| |
| /** |
| * Encapsulates task-specific information: name, index of subtask, parallelism and attempt number. |
| */ |
| @Internal |
| public class TaskInfo { |
| |
| private final String taskName; |
| private final String taskNameWithSubtasks; |
| private final int maxNumberOfParallelSubtasks; |
| private final int indexOfSubtask; |
| private final int numberOfParallelSubtasks; |
| private final int attemptNumber; |
| |
| public TaskInfo(String taskName, int maxNumberOfParallelSubtasks, int indexOfSubtask, int numberOfParallelSubtasks, int attemptNumber) { |
| checkArgument(indexOfSubtask >= 0, "Task index must be a non-negative number."); |
| checkArgument(maxNumberOfParallelSubtasks >= 1, "Max parallelism must be a positive number."); |
| checkArgument(maxNumberOfParallelSubtasks >= numberOfParallelSubtasks, "Max parallelism must be >= than parallelism."); |
| checkArgument(numberOfParallelSubtasks >= 1, "Parallelism must be a positive number."); |
| checkArgument(indexOfSubtask < numberOfParallelSubtasks, "Task index must be less than parallelism."); |
| checkArgument(attemptNumber >= 0, "Attempt number must be a non-negative number."); |
| this.taskName = checkNotNull(taskName, "Task Name must not be null."); |
| this.maxNumberOfParallelSubtasks = maxNumberOfParallelSubtasks; |
| this.indexOfSubtask = indexOfSubtask; |
| this.numberOfParallelSubtasks = numberOfParallelSubtasks; |
| this.attemptNumber = attemptNumber; |
| this.taskNameWithSubtasks = taskName + " (" + (indexOfSubtask + 1) + '/' + numberOfParallelSubtasks + ')'; |
| } |
| |
| /** |
| * Returns the name of the task |
| * |
| * @return The name of the task |
| */ |
| public String getTaskName() { |
| return this.taskName; |
| } |
| |
| /** |
| * Gets the max parallelism aka the max number of subtasks. |
| */ |
| public int getMaxNumberOfParallelSubtasks() { |
| return maxNumberOfParallelSubtasks; |
| } |
| |
| /** |
| * Gets the number of this parallel subtask. The numbering starts from 0 and goes up to |
| * parallelism-1 (parallelism as returned by {@link #getNumberOfParallelSubtasks()}). |
| * |
| * @return The index of the parallel subtask. |
| */ |
| public int getIndexOfThisSubtask() { |
| return this.indexOfSubtask; |
| } |
| |
| /** |
| * Gets the parallelism with which the parallel task runs. |
| * |
| * @return The parallelism with which the parallel task runs. |
| */ |
| public int getNumberOfParallelSubtasks() { |
| return this.numberOfParallelSubtasks; |
| } |
| |
| /** |
| * Gets the attempt number of this parallel subtask. First attempt is numbered 0. |
| * The attempt number corresponds to the number of times this task has been restarted(after |
| * failure/cancellation) since the job was initially started. |
| * |
| * @return Attempt number of the subtask. |
| */ |
| public int getAttemptNumber() { |
| return this.attemptNumber; |
| } |
| |
| /** |
| * Returns the name of the task, appended with the subtask indicator, such as "MyTask (3/6)", |
| * where 3 would be ({@link #getIndexOfThisSubtask()} + 1), and 6 would be |
| * {@link #getNumberOfParallelSubtasks()}. |
| * |
| * @return The name of the task, with subtask indicator. |
| */ |
| public String getTaskNameWithSubtasks() { |
| return this.taskNameWithSubtasks; |
| } |
| } |