From dda11ac7e6d4f857c21c9e7579046f36a8af4855 Mon Sep 17 00:00:00 2001 From: Jeff Burke Date: Thu, 18 Jan 2024 09:55:20 -0800 Subject: [PATCH] CADC-12563 allow the AbstractExecutor to run a sync job in the SUSPENDED phase --- cadc-uws-server/build.gradle | 2 +- .../nrc/cadc/uws/server/AbstractExecutor.java | 20 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/cadc-uws-server/build.gradle b/cadc-uws-server/build.gradle index fa2b58a..876c792 100644 --- a/cadc-uws-server/build.gradle +++ b/cadc-uws-server/build.gradle @@ -15,7 +15,7 @@ sourceCompatibility = 1.8 group = 'org.opencadc' -version = '1.2.19' +version = '1.2.20' description = 'OpenCADC UWS server library' def git_url = 'https://github.com/opencadc/uws' diff --git a/cadc-uws-server/src/main/java/ca/nrc/cadc/uws/server/AbstractExecutor.java b/cadc-uws-server/src/main/java/ca/nrc/cadc/uws/server/AbstractExecutor.java index c0ecf3d..0682427 100644 --- a/cadc-uws-server/src/main/java/ca/nrc/cadc/uws/server/AbstractExecutor.java +++ b/cadc-uws-server/src/main/java/ca/nrc/cadc/uws/server/AbstractExecutor.java @@ -157,14 +157,20 @@ public final void execute(Job job, SyncOutput sync) log.debug("execute: " + job.getID() + " sync=" + (sync != null)); log.debug(job.getID() + ": PENDING -> QUEUED"); ExecutionPhase ep = jobUpdater.setPhase(job.getID(), ExecutionPhase.PENDING, ExecutionPhase.QUEUED); - if (!ExecutionPhase.QUEUED.equals(ep)) - { - ExecutionPhase actual = jobUpdater.getPhase(job.getID()); - log.debug(job.getID() + ": PENDING -> QUEUED [FAILED] -- was " + actual); - throw new JobPhaseException("cannot execute job " + job.getID() + " when phase = " + actual); + + // If the phase change from PENDING to QUEUED fails (null ExecutionPhase returned from setPhase()), + // check for a sync job in the SUSPENDED phase, if found do not change the phase, and allow the job to be run. + if (ep == null && sync != null && job.getExecutionPhase().equals(ExecutionPhase.SUSPENDED)) { + log.debug(job.getID() + ": SUSPENDED - no phase change"); + } else { + if (!ExecutionPhase.QUEUED.equals(ep)) { + ExecutionPhase actual = jobUpdater.getPhase(job.getID()); + log.debug(job.getID() + ": PENDING -> QUEUED [FAILED] -- was " + actual); + throw new JobPhaseException("cannot execute job " + job.getID() + " when phase = " + actual); + } + job.setExecutionPhase(ep); + log.debug(job.getID() + ": PENDING -> QUEUED [OK]"); } - job.setExecutionPhase(ep); - log.debug(job.getID() + ": PENDING -> QUEUED [OK]"); try {