diff --git a/scala/src/org/broadinstitute/sting/queue/engine/FunctionEdge.scala b/scala/src/org/broadinstitute/sting/queue/engine/FunctionEdge.scala index 64ac20c53..632466815 100644 --- a/scala/src/org/broadinstitute/sting/queue/engine/FunctionEdge.scala +++ b/scala/src/org/broadinstitute/sting/queue/engine/FunctionEdge.scala @@ -12,11 +12,11 @@ class FunctionEdge(var function: QFunction) extends QEdge { var runner: JobRunner =_ private var currentStatus = { - val doneOutputs = function.doneOutputs - val failOutputs = function.failOutputs - if (failOutputs.exists(_.exists)) + val isDone = function.isDone + val isFail = function.isFail + if (isFail.isDefined && isFail.get) RunnerStatus.FAILED - else if (doneOutputs.size > 0 && doneOutputs.forall(_.exists)) + else if (isDone.isDefined && isDone.get) RunnerStatus.DONE else RunnerStatus.PENDING diff --git a/scala/src/org/broadinstitute/sting/queue/function/QFunction.scala b/scala/src/org/broadinstitute/sting/queue/function/QFunction.scala index a599c9b08..40e978c8f 100644 --- a/scala/src/org/broadinstitute/sting/queue/function/QFunction.scala +++ b/scala/src/org/broadinstitute/sting/queue/function/QFunction.scala @@ -34,6 +34,30 @@ trait QFunction { */ def dotString = "" + /** + * Returns true if the function is done, false if it's + * not done and None if the done status is unknown. + */ + def isDone = { + val files = doneOutputs + if (files.size == 0) + None + else + Some(files.forall(_.exists)) + } + + /** + * Returns true if the function has failed, false if it + * has not failed and None if the fail status is unknown. + */ + def isFail = { + val files = failOutputs + if (files.size == 0) + None + else + Some(files.exists(_.exists)) + } + /** * Returns true if the file should be used for status output. * @return true if the file should be used for status output. diff --git a/scala/src/org/broadinstitute/sting/queue/function/scattergather/CreateTempDirsFunction.scala b/scala/src/org/broadinstitute/sting/queue/function/scattergather/CreateTempDirsFunction.scala index e2d22d834..0d1842b52 100644 --- a/scala/src/org/broadinstitute/sting/queue/function/scattergather/CreateTempDirsFunction.scala +++ b/scala/src/org/broadinstitute/sting/queue/function/scattergather/CreateTempDirsFunction.scala @@ -19,5 +19,7 @@ class CreateTempDirsFunction extends InProcessFunction { override def useStatusOutput(file: File) = false + override def isDone = Some(tempDirectories.forall(_.exists)) + def run() = tempDirectories.foreach(_.mkdirs) }