From 37df43694fe782dfa01e29d2f80318438f69391c Mon Sep 17 00:00:00 2001 From: gbrodman Date: Tue, 10 Nov 2020 17:09:26 -0500 Subject: [PATCH] Maintain only one row in the TmchCrl table at all times (#869) * Maintain only one row in the TmchCrl table at all times --- .../google/registry/model/tmch/TmchCrl.java | 11 ++++++++++- .../google/registry/model/tmch/TmchCrlTest.java | 17 +++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/google/registry/model/tmch/TmchCrl.java b/core/src/main/java/google/registry/model/tmch/TmchCrl.java index 50cf4803d..07a2befa9 100644 --- a/core/src/main/java/google/registry/model/tmch/TmchCrl.java +++ b/core/src/main/java/google/registry/model/tmch/TmchCrl.java @@ -77,7 +77,16 @@ public final class TmchCrl extends CrossTldSingleton implements DatastoreEntity, tmchCrl.crl = checkNotNull(crl, "crl"); tmchCrl.url = checkNotNull(url, "url"); ofyTm().transactNew(() -> ofyTm().putWithoutBackup(tmchCrl)); - jpaTm().transactNew(() -> jpaTm().putWithoutBackup(tmchCrl)); + jpaTm() + .transactNew( + () -> { + // Delete the old one and insert the new one + jpaTm() + .getEntityManager() + .createQuery("DELETE FROM TmchCrl") + .executeUpdate(); + jpaTm().putWithoutBackup(tmchCrl); + }); }); } diff --git a/core/src/test/java/google/registry/model/tmch/TmchCrlTest.java b/core/src/test/java/google/registry/model/tmch/TmchCrlTest.java index 3f75a5436..e1b977b06 100644 --- a/core/src/test/java/google/registry/model/tmch/TmchCrlTest.java +++ b/core/src/test/java/google/registry/model/tmch/TmchCrlTest.java @@ -47,6 +47,23 @@ public class TmchCrlTest extends EntityTestCase { assertThat(loadFromSql()).isEqualTo(expected); } + @Test + void testMultipleWrites() { + TmchCrl.set("first", "https://first.cat"); + assertThat(TmchCrl.get().get().getCrl()).isEqualTo("first"); + TmchCrl.set("second", "https://second.cat"); + assertThat(TmchCrl.get().get().getCrl()).isEqualTo("second"); + jpaTm() + .transact( + () -> + assertThat( + jpaTm() + .getEntityManager() + .createQuery("SELECT COUNT(*) FROM TmchCrl", Long.class) + .getSingleResult()) + .isEqualTo(1L)); + } + private static TmchCrl loadFromSql() { return jpaTm() .transact(