eu.stratosphere.nephele.template.AbstractInvokable Maven / Gradle / Ivy
/***********************************************************************************************************************
* Copyright (C) 2010-2013 by the Stratosphere project (http://stratosphere.eu)
*
* Licensed 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 eu.stratosphere.nephele.template;
import eu.stratosphere.configuration.Configuration;
import eu.stratosphere.configuration.IllegalConfigurationException;
import eu.stratosphere.nephele.execution.Environment;
/**
* Abstract base class for every task class in Nephele.
*
*/
public abstract class AbstractInvokable {
/**
* The environment assigned to this invokable.
*/
private volatile Environment environment = null;
/**
* Must be overwritten by the concrete task to instantiate the required record reader and record writer.
*/
public abstract void registerInputOutput();
/**
* Must be overwritten by the concrete task. This method is called by the task manager
* when the actual execution of the task starts.
*
* @throws Execution
* thrown if any exception occurs during the execution of the tasks
*/
public abstract void invoke() throws Exception;
/**
* Sets the environment of this task.
*
* @param environment
* the environment of this task
*/
public final void setEnvironment(final Environment environment) {
this.environment = environment;
}
/**
* Returns the environment of this task.
*
* @return the environment of this task or null
if the environment has not yet been set
*/
// TODO: This method should be final
public Environment getEnvironment() {
return this.environment;
}
/**
* Overwrite this method to implement task specific checks if the
* respective task has been configured properly.
*
* @throws IllegalConfigurationException
* thrown if the respective tasks is not configured properly
*/
public void checkConfiguration() throws IllegalConfigurationException {
// The default implementation does nothing
}
/**
* Overwrite this method to provide the minimum number of subtasks the respective task
* must be split into at runtime.
*
* @return the minimum number of subtasks the respective task must be split into at runtime
*/
public int getMinimumNumberOfSubtasks() {
// The default implementation always returns 1
return 1;
}
/**
* Overwrite this method to provide the maximum number of subtasks the respective task
* can be split into at runtime.
*
* @return the maximum number of subtasks the respective task can be split into at runtime, -1
for
* infinity
*/
public int getMaximumNumberOfSubtasks() {
// The default implementation always returns -1
return -1;
}
/**
* Returns the current number of subtasks the respective task is split into.
*
* @return the current number of subtasks the respective task is split into
*/
public final int getCurrentNumberOfSubtasks() {
return this.environment.getCurrentNumberOfSubtasks();
}
/**
* Returns the index of this subtask in the subtask group.
*
* @return the index of this subtask in the subtask group
*/
public final int getIndexInSubtaskGroup() {
return this.environment.getIndexInSubtaskGroup();
}
/**
* Returns the task configuration object which was attached to the original {@link JobVertex}.
*
* @return the task configuration object which was attached to the original {@link JobVertex}
*/
public final Configuration getTaskConfiguration() {
return this.environment.getTaskConfiguration();
}
/**
* Returns the job configuration object which was attached to the original {@link JobGraph}.
*
* @return the job configuration object which was attached to the original {@link JobGraph}
*/
public final Configuration getJobConfiguration() {
return this.environment.getJobConfiguration();
}
/**
* This method should be called by the user code if a custom
* user thread has been started.
*
* @param userThread
* the user thread which has been started
*/
public final void userThreadStarted(Thread userThread) {
if (this.environment != null) {
this.environment.userThreadStarted(userThread);
}
}
/**
* This method should be called by the user code if a custom
* user thread has finished.
*
* @param userThread
* the user thread which has finished
*/
public final void userThreadFinished(Thread userThread) {
if (this.environment != null) {
this.environment.userThreadFinished(userThread);
}
}
/**
* This method is called when a task is canceled either as a result of a user abort or an execution failure. It can
* be overwritten to respond to shut down the user code properly.
*
* @throws Exception
* thrown if any exception occurs during the execution of the user code
*/
public void cancel() throws Exception {
// The default implementation does nothing.
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy