From 189d585d7bed70bd9df768041f9277ca1c8adb7c Mon Sep 17 00:00:00 2001 From: Jeff Burke Date: Thu, 18 Jan 2024 10:18:44 -0800 Subject: [PATCH 1/4] CADC-12563 expect the PackageRunner job to be SUSPENDED instead of QUEUED --- cadc-pkg-server/build.gradle | 4 ++-- .../main/java/org/opencadc/pkg/server/PackageRunner.java | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cadc-pkg-server/build.gradle b/cadc-pkg-server/build.gradle index 2faa2742..7eaeb3f9 100644 --- a/cadc-pkg-server/build.gradle +++ b/cadc-pkg-server/build.gradle @@ -14,7 +14,7 @@ sourceCompatibility = 1.8 group = 'org.opencadc' -version = '1.2.0' +version = '1.2.1' description = 'OpenCADC CADC package server library' def git_url = 'https://github.com/opencadc/dal' @@ -25,7 +25,7 @@ dependencies { implementation 'org.opencadc:cadc-util:[1.6,2.0)' implementation 'org.opencadc:cadc-log:[1.0,)' implementation 'org.opencadc:cadc-registry:[1.0,)' - implementation 'org.opencadc:cadc-uws-server:[1.2,1.3)' + implementation 'org.opencadc:cadc-uws-server:[1.2.20,2.0)' testImplementation 'junit:junit:[4.0,5.0)' } diff --git a/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java b/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java index bb5a1229..8463f306 100644 --- a/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java +++ b/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java @@ -156,16 +156,16 @@ private void doIt() { ExecutionPhase ep; PackageWriter writer = null; try { - ep = jobUpdater.setPhase(job.getID(), ExecutionPhase.QUEUED, ExecutionPhase.EXECUTING, new Date()); + ep = jobUpdater.setPhase(job.getID(), ExecutionPhase.SUSPENDED, ExecutionPhase.EXECUTING, new Date()); if (!ExecutionPhase.EXECUTING.equals(ep)) { ep = jobUpdater.getPhase(job.getID()); - log.debug(job.getID() + ": QUEUED -> EXECUTING [FAILED] -- DONE"); + log.debug(job.getID() + ": SUSPENDED -> EXECUTING [FAILED] -- DONE"); logInfo.setSuccess(false); logInfo.setMessage("Could not set job phase to executing, was: " + ep); return; } - log.debug(job.getID() + ": QUEUED -> EXECUTING [OK]"); + log.debug(job.getID() + ": SUSPENDED -> EXECUTING [OK]"); // Package name should be set here, and anything else needed for // package to be created aside from initializing the output stream. @@ -206,7 +206,7 @@ private void doIt() { } catch (Throwable t) { if (ThrowableUtil.isACause(t, InterruptedException.class)) { try { - ep = jobUpdater.setPhase(job.getID(), ExecutionPhase.QUEUED, ExecutionPhase.EXECUTING, new Date()); + ep = jobUpdater.setPhase(job.getID(), ExecutionPhase.SUSPENDED, ExecutionPhase.EXECUTING, new Date()); if (!ExecutionPhase.ABORTED.equals(ep)) { return; // clean exit of aborted job From 03646f43c8d8bb842bb5a26d9297cdf44a32e726 Mon Sep 17 00:00:00 2001 From: Jeff Burke Date: Thu, 18 Jan 2024 16:03:33 -0800 Subject: [PATCH 2/4] CADC-12563 make the initial ExecutionPhase overridable --- .../org/opencadc/pkg/server/PackageRunner.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java b/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java index 8463f306..b894197c 100644 --- a/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java +++ b/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java @@ -152,20 +152,24 @@ public void run() { log.info(logInfo.end()); } + protected ExecutionPhase getInitialPhase() { + return ExecutionPhase.QUEUED; + } + private void doIt() { ExecutionPhase ep; PackageWriter writer = null; try { - ep = jobUpdater.setPhase(job.getID(), ExecutionPhase.SUSPENDED, ExecutionPhase.EXECUTING, new Date()); + ep = jobUpdater.setPhase(job.getID(), getInitialPhase(), ExecutionPhase.EXECUTING, new Date()); if (!ExecutionPhase.EXECUTING.equals(ep)) { ep = jobUpdater.getPhase(job.getID()); - log.debug(job.getID() + ": SUSPENDED -> EXECUTING [FAILED] -- DONE"); + log.debug(String.format("%s: %s -> EXECUTING [FAILED] -- DONE", job.getID(), getInitialPhase())); logInfo.setSuccess(false); logInfo.setMessage("Could not set job phase to executing, was: " + ep); return; } - log.debug(job.getID() + ": SUSPENDED -> EXECUTING [OK]"); + log.debug(String.format("%s: %s -> EXECUTING [OK]", job.getID(), getInitialPhase())); // Package name should be set here, and anything else needed for // package to be created aside from initializing the output stream. @@ -206,7 +210,7 @@ private void doIt() { } catch (Throwable t) { if (ThrowableUtil.isACause(t, InterruptedException.class)) { try { - ep = jobUpdater.setPhase(job.getID(), ExecutionPhase.SUSPENDED, ExecutionPhase.EXECUTING, new Date()); + ep = jobUpdater.setPhase(job.getID(), getInitialPhase(), ExecutionPhase.EXECUTING, new Date()); if (!ExecutionPhase.ABORTED.equals(ep)) { return; // clean exit of aborted job @@ -242,7 +246,7 @@ private void doIt() { private ByteCountOutputStream initOutputStream(String mimeType, String contentDisposition) throws IOException { // set up syncOutput response and headers - syncOutput.setResponseCode(200); + syncOutput.setCode(200); syncOutput.setHeader("Content-Type", mimeType); syncOutput.setHeader("Content-Disposition", contentDisposition); return new ByteCountOutputStream(syncOutput.getOutputStream()); From 1d206ebcc0fdc1c5a6c5648425683116a00c167b Mon Sep 17 00:00:00 2001 From: Jeff Burke Date: Fri, 19 Jan 2024 10:46:58 -0800 Subject: [PATCH 3/4] CADC-12563 cleanup PackageRunner exception handling --- .../opencadc/pkg/server/PackageRunner.java | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java b/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java index b894197c..c716e449 100644 --- a/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java +++ b/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java @@ -161,7 +161,6 @@ private void doIt() { PackageWriter writer = null; try { ep = jobUpdater.setPhase(job.getID(), getInitialPhase(), ExecutionPhase.EXECUTING, new Date()); - if (!ExecutionPhase.EXECUTING.equals(ep)) { ep = jobUpdater.getPhase(job.getID()); log.debug(String.format("%s: %s -> EXECUTING [FAILED] -- DONE", job.getID(), getInitialPhase())); @@ -208,20 +207,12 @@ private void doIt() { log.debug(job.getID() + ": EXECUTING -> COMPLETED [OK]"); } catch (Throwable t) { - if (ThrowableUtil.isACause(t, InterruptedException.class)) { - try { - ep = jobUpdater.setPhase(job.getID(), getInitialPhase(), ExecutionPhase.EXECUTING, new Date()); - - if (!ExecutionPhase.ABORTED.equals(ep)) { - return; // clean exit of aborted job - } - - } catch (Exception ex2) { - log.error("failed to check job phase after InterruptedException", ex2); - - } + try { + ep = jobUpdater.setPhase(job.getID(), job.getExecutionPhase(), ExecutionPhase.ERROR, new Date()); + } catch (Exception ex) { + log.error("failed to update job phase to ERROR after exception", ex); } - sendError(t, 500); + sendError(t, t.getMessage(), 500); } finally { // Finalize and close writer instance if (writer != null) { From b3f7743c20ee13d3942058aabd18993df58f122e Mon Sep 17 00:00:00 2001 From: Jeff Burke Date: Fri, 19 Jan 2024 11:07:14 -0800 Subject: [PATCH 4/4] CADC-12563 update PackageRunner error handling --- .../src/main/java/org/opencadc/pkg/server/PackageRunner.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java b/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java index c716e449..538da647 100644 --- a/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java +++ b/cadc-pkg-server/src/main/java/org/opencadc/pkg/server/PackageRunner.java @@ -208,11 +208,11 @@ private void doIt() { } catch (Throwable t) { try { - ep = jobUpdater.setPhase(job.getID(), job.getExecutionPhase(), ExecutionPhase.ERROR, new Date()); + ep = jobUpdater.setPhase(job.getID(), ExecutionPhase.EXECUTING, ExecutionPhase.ERROR, new Date()); } catch (Exception ex) { log.error("failed to update job phase to ERROR after exception", ex); } - sendError(t, t.getMessage(), 500); + sendError(t, 500); } finally { // Finalize and close writer instance if (writer != null) {