From cc9b3f5965e02552fe2be28409452112734a3938 Mon Sep 17 00:00:00 2001 From: gbrodman Date: Mon, 4 Dec 2023 19:24:17 -0500 Subject: [PATCH] Filter in SQL when updating/deleting alloc tokens (#2244) This doesn't fix any issues with dead/livelocks when deleting or updating allocation tokens, but it at least will significantly reduce the time to load the tokens that we'll want to update/delete. --- .../tools/UpdateOrDeleteAllocationTokensCommand.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/google/registry/tools/UpdateOrDeleteAllocationTokensCommand.java b/core/src/main/java/google/registry/tools/UpdateOrDeleteAllocationTokensCommand.java index 51ac05052..322a38a11 100644 --- a/core/src/main/java/google/registry/tools/UpdateOrDeleteAllocationTokensCommand.java +++ b/core/src/main/java/google/registry/tools/UpdateOrDeleteAllocationTokensCommand.java @@ -67,9 +67,12 @@ abstract class UpdateOrDeleteAllocationTokensCommand extends ConfirmingCommand { checkArgument(!prefix.isEmpty(), "Provided prefix should not be blank"); return tm().transact( () -> - tm().loadAllOf(AllocationToken.class).stream() - .filter(token -> token.getToken().startsWith(prefix)) - .map(AllocationToken::createVKey) + tm().query( + "SELECT token FROM AllocationToken WHERE token LIKE :prefix", + String.class) + .setParameter("prefix", String.format("%s%%", prefix)) + .getResultStream() + .map(token -> VKey.create(AllocationToken.class, token)) .collect(toImmutableList())); } }