Skip to content

Commit

Permalink
Move check for deleted output datasets to Job relationship properties
Browse files Browse the repository at this point in the history
  • Loading branch information
mvdbeek committed Dec 31, 2017
1 parent de75540 commit 732543e
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 16 deletions.
22 changes: 7 additions & 15 deletions lib/galaxy/managers/jobs.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,11 @@ def replace_dataset_ids(path, key, value):
a.value.like(wildcard_value)
))

conditions.append(and_(
model.Job.any_output_dataset_collection_instances_deleted == false(),
model.Job.any_output_dataset_deleted == false()
))

query = self.sa_session.query(model.Job, *used_ids).filter(and_(*conditions))
for job in query.all():
# We found a job that is equal in terms of tool_id, user, state and input datasets,
Expand Down Expand Up @@ -258,21 +263,8 @@ def replace_dataset_ids(path, key, value):
n_parameters += 1
if not n_parameters == len(param_dump):
continue
# check to make sure none of the output datasets or collections have been deleted
# TODO: refactors this into the initial job query
outputs_deleted = False
for job_to_output_dataset_association in job.output_datasets:
if job_to_output_dataset_association.dataset.deleted:
outputs_deleted = True
break
if not outputs_deleted:
for collection_instance in job.output_dataset_collection_instances:
if collection_instance.dataset_collection_instance.deleted:
outputs_deleted = True
break
if not outputs_deleted:
log.info("Searching jobs finished %s", search_timer)
return job
log.info("Searching jobs finished %s", search_timer)
return job
log.info("Searching jobs finished %s", search_timer)
return None

Expand Down
17 changes: 16 additions & 1 deletion lib/galaxy/model/mapping.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@
)
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.ext.orderinglist import ordering_list
from sqlalchemy.orm import backref, class_mapper, deferred, mapper, object_session, relation
from sqlalchemy.orm import backref, class_mapper, deferred, mapper, object_session, relation, column_property
from sqlalchemy.orm.collections import attribute_mapped_collection
from sqlalchemy.sql import exists
from sqlalchemy.types import BigInteger

from galaxy import model
Expand Down Expand Up @@ -1984,6 +1985,20 @@ def simple_mapping(model, **kwds):
input_datasets=relation(model.JobToInputDatasetAssociation),
input_dataset_collections=relation(model.JobToInputDatasetCollectionAssociation, lazy=True),
output_datasets=relation(model.JobToOutputDatasetAssociation, lazy=True),
any_output_dataset_deleted=column_property(
exists([model.HistoryDatasetAssociation],
and_(model.Job.table.c.id == model.JobToOutputDatasetAssociation.table.c.job_id,
model.HistoryDatasetAssociation.table.c.id == model.JobToOutputDatasetAssociation.table.c.dataset_id,
model.HistoryDatasetAssociation.table.c.deleted == true())
)
),
any_output_dataset_collection_instances_deleted=column_property(
exists([model.HistoryDatasetCollectionAssociation.table.c.id],
and_(model.Job.table.c.id == model.JobToOutputDatasetCollectionAssociation.table.c.job_id,
model.HistoryDatasetCollectionAssociation.table.c.id == model.JobToOutputDatasetCollectionAssociation.table.c.dataset_collection_id,
model.HistoryDatasetCollectionAssociation.table.c.deleted == true())
)
),
output_dataset_collection_instances=relation(model.JobToOutputDatasetCollectionAssociation, lazy=True),
output_dataset_collections=relation(model.JobToImplicitOutputDatasetCollectionAssociation, lazy=True),
post_job_actions=relation(model.PostJobActionAssociation, lazy=False),
Expand Down

0 comments on commit 732543e

Please sign in to comment.