From e66aee04167ceaa9724d0ec523d62ee76a744277 Mon Sep 17 00:00:00 2001 From: Ben McIlwain Date: Fri, 22 Nov 2024 14:48:19 -0500 Subject: [PATCH] Downgrade the tx isolation level of poll message ack flow (#2615) This might help alleviate DB transaction contention on the PollMessage table. A lower transaction isolation level is safe because acking a poll message is idempotent: there are only two things it does, either delete a poll message or take a recurring one from the past and set it to be a year in the future from the date in the past. Both of these operations will always yield the same final result even if executed multiple times simultaneously for some reason. --- core/src/main/java/google/registry/flows/poll/PollAckFlow.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/src/main/java/google/registry/flows/poll/PollAckFlow.java b/core/src/main/java/google/registry/flows/poll/PollAckFlow.java index aa3b74f94..368835e7b 100644 --- a/core/src/main/java/google/registry/flows/poll/PollAckFlow.java +++ b/core/src/main/java/google/registry/flows/poll/PollAckFlow.java @@ -37,6 +37,8 @@ import google.registry.model.poll.MessageQueueInfo; import google.registry.model.poll.PollMessage; import google.registry.model.poll.PollMessageExternalKeyConverter; import google.registry.model.poll.PollMessageExternalKeyConverter.PollMessageExternalKeyParseException; +import google.registry.persistence.IsolationLevel; +import google.registry.persistence.PersistenceModule.TransactionIsolationLevel; import google.registry.persistence.VKey; import java.util.Optional; import javax.inject.Inject; @@ -55,6 +57,7 @@ import org.joda.time.DateTime; * @error {@link PollAckFlow.MissingMessageIdException} * @error {@link PollAckFlow.NotAuthorizedToAckMessageException} */ +@IsolationLevel(value = TransactionIsolationLevel.TRANSACTION_READ_COMMITTED) public final class PollAckFlow implements MutatingFlow { @Inject ExtensionManager extensionManager;