1
0
mirror of https://github.com/google/nomulus synced 2026-02-10 06:50:30 +00:00

Skip synthetic history entries for resources that don't need them (#1320)

* Skip synthetic history entries for resources that don't need them

The reason for creating synthetic history entries is so that we can
guarantee that each EppResource's most recent *History object contains
that resource at that point in time. If the most recent *History object
in SQL contains that resource already, there is no need to create a
synthetic *History object for that resource.
This commit is contained in:
gbrodman
2021-09-17 12:10:15 -04:00
committed by GitHub
parent ad6471b3fd
commit 12dac76dc8
11 changed files with 161 additions and 48 deletions

View File

@@ -59,7 +59,7 @@ class CriteriaQueryBuilderTest {
.transact(
() ->
jpaTm()
.query(
.criteriaQuery(
CriteriaQueryBuilder.create(CriteriaQueryBuilderTestEntity.class)
.build())
.getResultList()))
@@ -80,7 +80,7 @@ class CriteriaQueryBuilderTest {
jpaTm().getEntityManager().getCriteriaBuilder()::equal,
"zztz")
.build();
return jpaTm().query(query).getResultList();
return jpaTm().criteriaQuery(query).getResultList();
});
assertThat(result).containsExactly(entity2);
}
@@ -96,7 +96,7 @@ class CriteriaQueryBuilderTest {
.where(
"data", jpaTm().getEntityManager().getCriteriaBuilder()::like, "a%")
.build();
return jpaTm().query(query).getResultList();
return jpaTm().criteriaQuery(query).getResultList();
});
assertThat(result).containsExactly(entity3);
}
@@ -112,7 +112,7 @@ class CriteriaQueryBuilderTest {
.where(
"data", jpaTm().getEntityManager().getCriteriaBuilder()::like, "%a%")
.build();
return jpaTm().query(query).getResultList();
return jpaTm().criteriaQuery(query).getResultList();
});
assertThat(result).containsExactly(entity1, entity3).inOrder();
}
@@ -132,7 +132,7 @@ class CriteriaQueryBuilderTest {
.where(
"data", jpaTm().getEntityManager().getCriteriaBuilder()::like, "%t%")
.build();
return jpaTm().query(query).getResultList();
return jpaTm().criteriaQuery(query).getResultList();
});
assertThat(result).containsExactly(entity1);
}
@@ -147,7 +147,7 @@ class CriteriaQueryBuilderTest {
CriteriaQueryBuilder.create(CriteriaQueryBuilderTestEntity.class)
.whereFieldIsIn("data", ImmutableList.of("aaa", "bbb"))
.build();
return jpaTm().query(query).getResultList();
return jpaTm().criteriaQuery(query).getResultList();
});
assertThat(result).containsExactly(entity3).inOrder();
}
@@ -162,7 +162,7 @@ class CriteriaQueryBuilderTest {
CriteriaQueryBuilder.create(CriteriaQueryBuilderTestEntity.class)
.whereFieldIsNotIn("data", ImmutableList.of("aaa", "bbb"))
.build();
return jpaTm().query(query).getResultList();
return jpaTm().criteriaQuery(query).getResultList();
});
assertThat(result).containsExactly(entity1, entity2).inOrder();
}
@@ -177,7 +177,7 @@ class CriteriaQueryBuilderTest {
CriteriaQueryBuilder.create(CriteriaQueryBuilderTestEntity.class)
.whereFieldIsIn("data", ImmutableList.of("aaa", "bbb", "data"))
.build();
return jpaTm().query(query).getResultList();
return jpaTm().criteriaQuery(query).getResultList();
});
assertThat(result).containsExactly(entity1, entity3).inOrder();
}
@@ -194,7 +194,7 @@ class CriteriaQueryBuilderTest {
.where(
"data", jpaTm().getEntityManager().getCriteriaBuilder()::like, "%a%")
.build();
return jpaTm().query(query).getResultList();
return jpaTm().criteriaQuery(query).getResultList();
});
assertThat(result).containsExactly(entity3, entity1).inOrder();
}
@@ -209,7 +209,7 @@ class CriteriaQueryBuilderTest {
CriteriaQueryBuilder.create(CriteriaQueryBuilderTestEntity.class)
.orderByDesc("data")
.build();
return jpaTm().query(query).getResultList();
return jpaTm().criteriaQuery(query).getResultList();
});
assertThat(result).containsExactly(entity2, entity1, entity3).inOrder();
}

View File

@@ -623,7 +623,7 @@ class JpaTransactionManagerImplTest {
.getEntityManager()
.contains(
jpaTm()
.query(
.criteriaQuery(
CriteriaQueryBuilder.create(TestEntity.class)
.where(
"name",

View File

@@ -15,12 +15,15 @@
package google.registry.tools.javascrap;
import static com.google.common.truth.Truth.assertThat;
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
import static google.registry.testing.DatabaseHelper.createTld;
import static google.registry.testing.DatabaseHelper.loadByKey;
import static google.registry.testing.DatabaseHelper.loadRegistrar;
import static google.registry.testing.DatabaseHelper.persistActiveDomain;
import static google.registry.testing.DatabaseHelper.persistActiveHost;
import static google.registry.testing.DatabaseHelper.persistDomainAsDeleted;
import static google.registry.testing.DatabaseHelper.persistDomainWithDependentResources;
import static google.registry.testing.DatabaseHelper.persistResource;
import static google.registry.util.DateTimeUtils.END_OF_TIME;
import static google.registry.util.DateTimeUtils.START_OF_TIME;
@@ -30,9 +33,11 @@ import com.googlecode.objectify.Key;
import google.registry.model.EppResource;
import google.registry.model.contact.ContactResource;
import google.registry.model.domain.DomainBase;
import google.registry.model.domain.DomainHistory;
import google.registry.model.host.HostResource;
import google.registry.model.reporting.HistoryEntry;
import google.registry.model.reporting.HistoryEntryDao;
import google.registry.model.tld.Registry;
import google.registry.testing.FakeResponse;
import google.registry.testing.mapreduce.MapreduceTestCase;
import org.joda.time.DateTime;
@@ -96,6 +101,38 @@ public class CreateSyntheticHistoryEntriesActionTest
assertThat(Iterables.getLast(historyEntries).getType()).isEqualTo(HistoryEntry.Type.SYNTHETIC);
}
@Test
void testDoesntSave_ifAlreadyReplayed() throws Exception {
DateTime now = DateTime.parse("1999-04-03T22:00:00.0Z");
DomainHistory domainHistoryWithoutDomain =
persistResource(
new DomainHistory.Builder()
.setType(HistoryEntry.Type.DOMAIN_CREATE)
.setModificationTime(now)
.setDomain(domain)
.setRegistrarId(domain.getCreationRegistrarId())
.build());
DomainHistory domainHistoryWithDomain =
domainHistoryWithoutDomain.asBuilder().setDomain(domain).build();
// Simulate having replayed the domain and history to SQL
jpaTm()
.transact(
() ->
jpaTm()
.putAll(
Registry.get("tld"),
loadRegistrar("TheRegistrar"),
contact,
domain,
domainHistoryWithDomain));
runMapreduce();
// Since we already had a DomainHistory with the domain in SQL, we shouldn't create a synthetic
// history entry
assertThat(HistoryEntryDao.loadHistoryObjectsForResource(domain.createVKey()))
.containsExactly(domainHistoryWithoutDomain);
}
@Test
void testCreation_forDeletedResource() throws Exception {
persistDomainAsDeleted(domain, domain.getCreationTime().plusMonths(6));