From e02f83765985c09187f042b207355f799d97f317 Mon Sep 17 00:00:00 2001 From: kshakir Date: Fri, 8 Oct 2010 06:39:55 +0000 Subject: [PATCH] Added the ability for Queue functions like mkdirs to override if they are done or not. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@4458 348d0f76-0448-11de-a6fe-93d51630548a --- .../sting/queue/engine/FunctionEdge.scala | 8 +++---- .../sting/queue/function/QFunction.scala | 24 +++++++++++++++++++ .../CreateTempDirsFunction.scala | 2 ++ 3 files changed, 30 insertions(+), 4 deletions(-) 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) }