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:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -623,7 +623,7 @@ class JpaTransactionManagerImplTest {
|
||||
.getEntityManager()
|
||||
.contains(
|
||||
jpaTm()
|
||||
.query(
|
||||
.criteriaQuery(
|
||||
CriteriaQueryBuilder.create(TestEntity.class)
|
||||
.where(
|
||||
"name",
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user