From d415c37efe59f1908c2e4289f94b45cd6c10f551 Mon Sep 17 00:00:00 2001 From: Kevin Birk Date: Mon, 26 Aug 2024 12:01:29 -0400 Subject: [PATCH] Remove additionalProperties from the TaskService sha256 (#4561) --- .../hmiserver/models/task/TaskRequest.java | 4 +-- .../hmiserver/service/tasks/TaskService.java | 25 +++++++++++++------ 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/server/src/main/java/software/uncharted/terarium/hmiserver/models/task/TaskRequest.java b/packages/server/src/main/java/software/uncharted/terarium/hmiserver/models/task/TaskRequest.java index 47d0286081..26d4790e1d 100644 --- a/packages/server/src/main/java/software/uncharted/terarium/hmiserver/models/task/TaskRequest.java +++ b/packages/server/src/main/java/software/uncharted/terarium/hmiserver/models/task/TaskRequest.java @@ -76,10 +76,8 @@ public String getSHA256() { objectMapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); final String encodedInput = Base64.getEncoder().encodeToString(input); - final String encodedAdditionalProperties = Base64.getEncoder() - .encodeToString(objectMapper.writeValueAsBytes(additionalProperties)); - final String strHash = String.format("%s-%s-%s-%s", type, script, encodedInput, encodedAdditionalProperties); + final String strHash = String.format("%s-%s-%s", type, script, encodedInput); final MessageDigest md = MessageDigest.getInstance("SHA-256"); return Base64.getEncoder().encodeToString(md.digest(strHash.getBytes(StandardCharsets.UTF_8))); } catch (final Exception e) { diff --git a/packages/server/src/main/java/software/uncharted/terarium/hmiserver/service/tasks/TaskService.java b/packages/server/src/main/java/software/uncharted/terarium/hmiserver/service/tasks/TaskService.java index 92c2f8fc9c..2618436ff1 100644 --- a/packages/server/src/main/java/software/uncharted/terarium/hmiserver/service/tasks/TaskService.java +++ b/packages/server/src/main/java/software/uncharted/terarium/hmiserver/service/tasks/TaskService.java @@ -88,14 +88,16 @@ private static class TaskRequestWithId extends TaskRequest { additionalProperties = req.getAdditionalProperties(); } - public TaskResponse createResponse(final TaskStatus status) { + public TaskResponse createResponse(final TaskStatus status, final String stdout, final String stderr) { return new TaskResponse() .setId(id) .setStatus(status) + .setScript(getScript()) .setUserId(userId) .setProjectId(projectId) - .setScript(getScript()) .setAdditionalProperties(getAdditionalProperties()) + .setStdout(stdout) + .setStderr(stderr) .setRequestSHA256(getSHA256()); } } @@ -109,11 +111,18 @@ public CompletableTaskFuture(final UUID id) { this.future = new CompletableFuture<>(); } - public CompletableTaskFuture(final UUID id, final TaskResponse resp) { - this.id = id; + public CompletableTaskFuture(final TaskRequestWithId req, final TaskResponse resp) { + this.id = req.getId(); + + // We are re-using a cached response, so lets create a TaskResponse from the + // actual TaskRequest + // and then copy over the response payload. + final TaskResponse actualResp = req.createResponse(resp.getStatus(), resp.getStdout(), resp.getStderr()); + actualResp.setOutput(resp.getOutput()); + this.future = new CompletableFuture<>(); - this.future.complete(resp); - this.latestResponse = resp; + this.future.complete(actualResp); + this.latestResponse = actualResp; } public synchronized void complete(final TaskResponse resp) { @@ -464,7 +473,7 @@ public TaskFuture runTaskAsync(final TaskRequest r) throws JsonProcessingExcepti log.info("Task response found in cache for SHA: {}", hash); // create and return a completed task future - return new CompletableTaskFuture(req.getId(), resp); + return new CompletableTaskFuture(req, resp); } // no cache entry for task, send a new one @@ -506,7 +515,7 @@ public TaskFuture runTaskAsync(final TaskRequest r) throws JsonProcessingExcepti rabbitTemplate.convertAndSend(requestQueue, jsonStr); // publish the queued task response - final TaskResponse queuedResponse = req.createResponse(TaskStatus.QUEUED); + final TaskResponse queuedResponse = req.createResponse(TaskStatus.QUEUED, "", ""); final String respJsonStr = objectMapper.writeValueAsString(queuedResponse); rabbitTemplate.convertAndSend(TASK_RUNNER_RESPONSE_EXCHANGE, "", respJsonStr);