diff --git a/src/main/java/cloudgene/mapred/api/v2/admin/ArchiveJob.java b/src/main/java/cloudgene/mapred/api/v2/admin/ArchiveJob.java index b77aa627..02f76320 100644 --- a/src/main/java/cloudgene/mapred/api/v2/admin/ArchiveJob.java +++ b/src/main/java/cloudgene/mapred/api/v2/admin/ArchiveJob.java @@ -1,7 +1,9 @@ package cloudgene.mapred.api.v2.admin; +import cloudgene.mapred.database.ParameterDao; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.restlet.data.Parameter; import org.restlet.data.Status; import org.restlet.representation.Representation; import org.restlet.representation.StringRepresentation; @@ -81,6 +83,9 @@ public Representation get() { job.setState(AbstractJob.STATE_RETIRED); dao.update(job); + ParameterDao parameterDao = new ParameterDao(getDatabase()); + parameterDao.deleteAllByJob(job); + if (externalWorkspace != null) { try { externalWorkspace.delete(job.getId()); diff --git a/src/main/java/cloudgene/mapred/api/v2/jobs/GetJobDetails.java b/src/main/java/cloudgene/mapred/api/v2/jobs/GetJobDetails.java index 4b816b2e..520ec3bb 100644 --- a/src/main/java/cloudgene/mapred/api/v2/jobs/GetJobDetails.java +++ b/src/main/java/cloudgene/mapred/api/v2/jobs/GetJobDetails.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Vector; +import cloudgene.mapred.database.ParameterDao; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.restlet.data.MediaType; @@ -148,6 +149,9 @@ public Representation deleteJob(Representation entity) { job.setState(AbstractJob.STATE_DELETED); dao.update(job); + ParameterDao parameterDao = new ParameterDao(getDatabase()); + parameterDao.deleteAllByJob(job); + Settings settings = getSettings(); IExternalWorkspace externalWorkspace = null; diff --git a/src/main/java/cloudgene/mapred/cron/CleanUpTasks.java b/src/main/java/cloudgene/mapred/cron/CleanUpTasks.java index c2e56589..f3cb97e3 100644 --- a/src/main/java/cloudgene/mapred/cron/CleanUpTasks.java +++ b/src/main/java/cloudgene/mapred/cron/CleanUpTasks.java @@ -3,6 +3,7 @@ import java.io.File; import java.util.List; +import cloudgene.mapred.database.ParameterDao; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -25,6 +26,8 @@ public class CleanUpTasks { public static int executeRetire(Database database, Settings settings) { JobDao dao = new JobDao(database); + ParameterDao parameterDao = new ParameterDao(database); + List oldJobs = dao.findAllNotifiedJobs(); int deleted = 0; @@ -53,6 +56,9 @@ public static int executeRetire(Database database, Settings settings) { job.setState(AbstractJob.STATE_RETIRED); dao.update(job); + + parameterDao.deleteAllByJob(job); + log.info("Job " + job.getId() + " retired."); deleted++; diff --git a/src/main/java/cloudgene/mapred/database/ParameterDao.java b/src/main/java/cloudgene/mapred/database/ParameterDao.java index eb2decc2..6028b8b8 100644 --- a/src/main/java/cloudgene/mapred/database/ParameterDao.java +++ b/src/main/java/cloudgene/mapred/database/ParameterDao.java @@ -183,7 +183,30 @@ public CloudgeneParameterOutput findById(int id) { } } - class ParameterInputMapper implements IRowMapper { + public boolean deleteAllByJob(AbstractJob job) { + try { + + StringBuilder sql = new StringBuilder(); + sql.append("delete "); + sql.append("from parameter "); + sql.append("where job_id = ?"); + + Object[] params = new Object[1]; + params[0] = job.getId(); + + update(sql.toString(), params); + + log.debug("delete all parameters by job_id '" + job.getId() + "' successful."); + + return true; + + } catch (SQLException e) { + log.error("delete all parameters by job_id '" + job.getId() + "' failed.", e); + return false; + } + } + + class ParameterInputMapper implements IRowMapper { @Override public Object mapRow(ResultSet rs, int row) throws SQLException {