From 61b37f4b48b2e7087f140835ce165bf4962548ee Mon Sep 17 00:00:00 2001 From: gbrodman Date: Wed, 23 Oct 2019 06:51:20 -0700 Subject: [PATCH] Add a registrarId index to RegistryLock (#312) * Add a registrarId index to RegistryLock * Merge remote-tracking branch 'origin/master' into getByRegistrar * Responses to CR --- .../registry/model/registry/RegistryLockDao.java | 16 ++++++++++++++++ .../registry/schema/domain/RegistryLock.java | 3 ++- .../model/registry/RegistryLockDaoTest.java | 16 ++++++++++++++++ .../flyway/V8__registry_lock_registrar_index.sql | 16 ++++++++++++++++ .../resources/sql/schema/db-schema.sql.generated | 3 +++ .../main/resources/sql/schema/nomulus.golden.sql | 7 +++++++ 6 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 db/src/main/resources/sql/flyway/V8__registry_lock_registrar_index.sql diff --git a/core/src/main/java/google/registry/model/registry/RegistryLockDao.java b/core/src/main/java/google/registry/model/registry/RegistryLockDao.java index 2dfc1a047..88e434587 100644 --- a/core/src/main/java/google/registry/model/registry/RegistryLockDao.java +++ b/core/src/main/java/google/registry/model/registry/RegistryLockDao.java @@ -17,6 +17,7 @@ package google.registry.model.registry; import static com.google.common.base.Preconditions.checkNotNull; import static google.registry.model.transaction.TransactionManagerFactory.jpaTm; +import com.google.common.collect.ImmutableList; import google.registry.schema.domain.RegistryLock; import javax.persistence.EntityManager; @@ -45,6 +46,21 @@ public final class RegistryLockDao { }); } + public static ImmutableList getByRegistrarId(String registrarId) { + return jpaTm() + .transact( + () -> + ImmutableList.copyOf( + jpaTm() + .getEntityManager() + .createQuery( + "SELECT lock FROM RegistryLock lock WHERE" + + " lock.registrarId = :registrarId", + RegistryLock.class) + .setParameter("registrarId", registrarId) + .getResultList())); + } + public static RegistryLock save(RegistryLock registryLock) { checkNotNull(registryLock, "Null registry lock cannot be saved"); return jpaTm().transact(() -> jpaTm().getEntityManager().merge(registryLock)); diff --git a/core/src/main/java/google/registry/schema/domain/RegistryLock.java b/core/src/main/java/google/registry/schema/domain/RegistryLock.java index c80fc8682..49b69f64d 100644 --- a/core/src/main/java/google/registry/schema/domain/RegistryLock.java +++ b/core/src/main/java/google/registry/schema/domain/RegistryLock.java @@ -65,7 +65,8 @@ import org.joda.time.DateTime; name = "idx_registry_lock_repo_id_revision_id", columnList = "repoId, revisionId", unique = true), - @Index(name = "idx_registry_lock_verification_code", columnList = "verificationCode") + @Index(name = "idx_registry_lock_verification_code", columnList = "verificationCode"), + @Index(name = "idx_registry_lock_registrar_id", columnList = "registrarId") }) public final class RegistryLock extends ImmutableObject implements Buildable { diff --git a/core/src/test/java/google/registry/model/registry/RegistryLockDaoTest.java b/core/src/test/java/google/registry/model/registry/RegistryLockDaoTest.java index b5ccd3e4e..c69203404 100644 --- a/core/src/test/java/google/registry/model/registry/RegistryLockDaoTest.java +++ b/core/src/test/java/google/registry/model/registry/RegistryLockDaoTest.java @@ -14,6 +14,7 @@ package google.registry.model.registry; +import static com.google.common.collect.ImmutableSet.toImmutableSet; import static com.google.common.truth.Truth.assertThat; import static google.registry.model.transaction.TransactionManagerFactory.jpaTm; import static google.registry.testing.JUnitBackports.assertThrows; @@ -109,6 +110,21 @@ public final class RegistryLockDaoTest { assertThrows(NullPointerException.class, () -> RegistryLockDao.save(null)); } + @Test + public void testLoad_byRegistrarId() { + RegistryLock lock = createLock(); + RegistryLock secondLock = createLock().asBuilder().setDomainName("otherexample.test").build(); + RegistryLockDao.save(lock); + RegistryLockDao.save(secondLock); + + assertThat( + RegistryLockDao.getByRegistrarId("TheRegistrar").stream() + .map(RegistryLock::getDomainName) + .collect(toImmutableSet())) + .containsExactly("example.test", "otherexample.test"); + assertThat(RegistryLockDao.getByRegistrarId("nonexistent")).isEmpty(); + } + private RegistryLock createLock() { return new RegistryLock.Builder() .setRepoId("repoId") diff --git a/db/src/main/resources/sql/flyway/V8__registry_lock_registrar_index.sql b/db/src/main/resources/sql/flyway/V8__registry_lock_registrar_index.sql new file mode 100644 index 000000000..47503db3c --- /dev/null +++ b/db/src/main/resources/sql/flyway/V8__registry_lock_registrar_index.sql @@ -0,0 +1,16 @@ +-- Copyright 2019 The Nomulus Authors. All Rights Reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. + +create index if not exists idx_registry_lock_registrar_id ON "RegistryLock" + using btree (registrar_id); diff --git a/db/src/main/resources/sql/schema/db-schema.sql.generated b/db/src/main/resources/sql/schema/db-schema.sql.generated index 615b4e734..073dd1d95 100644 --- a/db/src/main/resources/sql/schema/db-schema.sql.generated +++ b/db/src/main/resources/sql/schema/db-schema.sql.generated @@ -22,6 +22,7 @@ create table "ClaimsList" ( revision_id bigserial not null, creation_timestamp timestamptz not null, + tmdb_generation_time timestamptz not null, primary key (revision_id) ); @@ -160,6 +161,8 @@ alter table if exists "Domain_GracePeriod" add constraint UK_4ps2u4y8i5r91wu2n1x2xea28 unique (grace_periods_id); create index premiumlist_name_idx on "PremiumList" (name); +create index idx_registry_lock_verification_code on "RegistryLock" (verification_code); +create index idx_registry_lock_registrar_id on "RegistryLock" (registrar_id); alter table if exists "RegistryLock" add constraint idx_registry_lock_repo_id_revision_id unique (repo_id, revision_id); diff --git a/db/src/main/resources/sql/schema/nomulus.golden.sql b/db/src/main/resources/sql/schema/nomulus.golden.sql index e6d84ca07..496b71546 100644 --- a/db/src/main/resources/sql/schema/nomulus.golden.sql +++ b/db/src/main/resources/sql/schema/nomulus.golden.sql @@ -223,6 +223,13 @@ ALTER TABLE ONLY public."RegistryLock" ADD CONSTRAINT idx_registry_lock_repo_id_revision_id UNIQUE (repo_id, revision_id); +-- +-- Name: idx_registry_lock_registrar_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_registry_lock_registrar_id ON public."RegistryLock" USING btree (registrar_id); + + -- -- Name: idx_registry_lock_verification_code; Type: INDEX; Schema: public; Owner: - --