From 27e781761d248dfed19be4b5ccc1d239ecdbee96 Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Fri, 28 Jul 2023 12:04:23 +0200 Subject: [PATCH] (mq single shot inbox) Flag messages as OK if there is no recipient --- .../marginalia/mq/inbox/MqSingleShotInbox.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/code/common/message-queue/src/main/java/nu/marginalia/mq/inbox/MqSingleShotInbox.java b/code/common/message-queue/src/main/java/nu/marginalia/mq/inbox/MqSingleShotInbox.java index 85f7e2f5..edecf9d4 100644 --- a/code/common/message-queue/src/main/java/nu/marginalia/mq/inbox/MqSingleShotInbox.java +++ b/code/common/message-queue/src/main/java/nu/marginalia/mq/inbox/MqSingleShotInbox.java @@ -2,6 +2,7 @@ package nu.marginalia.mq.inbox; import lombok.SneakyThrows; import nu.marginalia.mq.MqMessage; +import nu.marginalia.mq.MqMessageState; import nu.marginalia.mq.persistence.MqPersistence; import java.sql.SQLException; @@ -71,9 +72,24 @@ public class MqSingleShotInbox { return Optional.empty(); } + /** Send a response to the specified message. If the original message has no response inbox, + * the original message will be marked as OK instead. + * + * @param originalMessage The original message + * @param response The response + */ public void sendResponse(MqMessage originalMessage, MqInboxResponse response) { try { - persistence.sendResponse(originalMessage.msgId(), response.state(), response.message()); + if (!originalMessage.expectsResponse()) { + // If the original message doesn't expect a response, we can just mark it as OK, + // since the sendResponse method will fail explosively since it can't insert a response + // to a non-existent inbox. + + persistence.updateMessageState(originalMessage.msgId(), MqMessageState.OK); + } + else { + persistence.sendResponse(originalMessage.msgId(), response.state(), response.message()); + } } catch (SQLException e) { throw new RuntimeException(e); }