package fr.ens.biologie.genomique.eoulsan.core.schedulers.clusters;
import static com.google.common.base.Preconditions.checkNotNull;
import static fr.ens.biologie.genomique.eoulsan.EoulsanLogger.getLogger;
import java.io.IOException;
import fr.ens.biologie.genomique.eoulsan.EoulsanLogger;
import fr.ens.biologie.genomique.eoulsan.core.workflow.EmergencyStopTask;
import fr.ens.biologie.genomique.eoulsan.core.workflow.EmergencyStopTasks;
/**
* This class define an EmergencyStopTask for cluster Jobs.
* @author Laurent Jourdren
* @since 2.0
*/
public class ClusterJobEmergencyStopTask implements EmergencyStopTask {
private final ClusterTaskScheduler scheduler;
private final String jobId;
@Override
public void stop() {
getLogger().info("Try to kill "
+ this.jobId + " " + this.scheduler.getSchedulerName() + " job");
try {
this.scheduler.statusJob(this.jobId);
} catch (IOException e) {
EoulsanLogger.getLogger().severe(e.getMessage());
}
getLogger().info(
this.scheduler.getSchedulerName() + " job " + this.jobId + " killed");
}
//
// Object tasks
//
@Override
public int hashCode() {
return this.jobId.hashCode();
}
@Override
public boolean equals(final Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof ClusterJobEmergencyStopTask)) {
return false;
}
final ClusterJobEmergencyStopTask that = (ClusterJobEmergencyStopTask) obj;
return this.jobId.equals(that.jobId);
}
//
// Static method
//
/**
* Add a cluster Job to the EmergencyStopTasks.
* @param scheduler the cluster scheduler
* @param jobId the job id
*/
public static void addHadoopJobEmergencyStopTask(
final ClusterTaskScheduler scheduler, final String jobId) {
EmergencyStopTasks.getInstance()
.add(new ClusterJobEmergencyStopTask(scheduler, jobId));
}
/**
* Remove a cluster Job to the EmergencyStopTasks.
* @param scheduler the cluster scheduler
* @param jobId the job id
*/
public static void removeHadoopJobEmergencyStopTask(
final ClusterTaskScheduler scheduler, final String jobId) {
EmergencyStopTasks.getInstance()
.remove(new ClusterJobEmergencyStopTask(scheduler, jobId));
}
//
// Constructor
//
/**
* Public constructor.
* @param scheduler the cluster scheduler
* @param jobId the job id
*/
public ClusterJobEmergencyStopTask(final ClusterTaskScheduler scheduler,
final String jobId) {
checkNotNull(scheduler, "scheduler argument cannot be null");
checkNotNull(jobId, "jobId argument cannot be null");
this.scheduler = scheduler;
this.jobId = jobId;
}
}