diff --git a/core/src/main/java/google/registry/flows/domain/DomainUpdateFlow.java b/core/src/main/java/google/registry/flows/domain/DomainUpdateFlow.java index af92e2416..02b3334b1 100644 --- a/core/src/main/java/google/registry/flows/domain/DomainUpdateFlow.java +++ b/core/src/main/java/google/registry/flows/domain/DomainUpdateFlow.java @@ -87,6 +87,7 @@ import google.registry.model.poll.PendingActionNotificationResponse.DomainPendin import google.registry.model.poll.PollMessage; import google.registry.model.reporting.IcannReportingTypes.ActivityReportField; import google.registry.model.tld.Registry; +import java.util.Objects; import java.util.Optional; import javax.inject.Inject; import org.joda.time.DateTime; @@ -181,7 +182,9 @@ public final class DomainUpdateFlow implements TransactionalFlow { DomainHistory domainHistory = historyBuilder.setType(DOMAIN_UPDATE).setDomain(newDomain).build(); validateNewState(newDomain); - dnsQueue.addDomainRefreshTask(targetId); + if (requiresDnsUpdate(existingDomain, newDomain)) { + dnsQueue.addDomainRefreshTask(targetId); + } ImmutableSet.Builder entitiesToSave = new ImmutableSet.Builder<>(); entitiesToSave.add(newDomain, domainHistory); Optional statusUpdateBillingEvent = @@ -203,6 +206,16 @@ public final class DomainUpdateFlow implements TransactionalFlow { return responseBuilder.build(); } + /** Determines if any of the changes to new domain should trigger DNS update. */ + private boolean requiresDnsUpdate(Domain existingDomain, Domain newDomain) { + if (existingDomain.shouldPublishToDns() != newDomain.shouldPublishToDns() + || !Objects.equals(newDomain.getDsData(), existingDomain.getDsData()) + || !Objects.equals(newDomain.getNsHosts(), existingDomain.getNsHosts())) { + return true; + } + return false; + } + /** Fail if the object doesn't exist or was deleted. */ private void verifyUpdateAllowed(Update command, Domain existingDomain, DateTime now) throws EppException { @@ -267,12 +280,18 @@ public final class DomainUpdateFlow implements TransactionalFlow { .setLastEppUpdateRegistrarId(registrarId) .addStatusValues(add.getStatusValues()) .removeStatusValues(remove.getStatusValues()) - .addNameservers(add.getNameservers().stream().collect(toImmutableSet())) - .removeNameservers(remove.getNameservers().stream().collect(toImmutableSet())) .removeContacts(remove.getContacts()) .addContacts(add.getContacts()) .setRegistrant(firstNonNull(change.getRegistrant(), domain.getRegistrant())) .setAuthInfo(firstNonNull(change.getAuthInfo(), domain.getAuthInfo())); + + if (!add.getNameservers().isEmpty()) { + domainBuilder.addNameservers(add.getNameservers().stream().collect(toImmutableSet())); + } + if (!remove.getNameservers().isEmpty()) { + domainBuilder.removeNameservers(remove.getNameservers().stream().collect(toImmutableSet())); + } + Optional superuserExt = eppInput.getSingleExtension(DomainUpdateSuperuserExtension.class); if (superuserExt.isPresent()) { diff --git a/core/src/test/java/google/registry/flows/domain/DomainUpdateFlowTest.java b/core/src/test/java/google/registry/flows/domain/DomainUpdateFlowTest.java index 232796280..b5a83b24d 100644 --- a/core/src/test/java/google/registry/flows/domain/DomainUpdateFlowTest.java +++ b/core/src/test/java/google/registry/flows/domain/DomainUpdateFlowTest.java @@ -47,6 +47,7 @@ import static google.registry.testing.DomainSubject.assertAboutDomains; import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions; import static google.registry.testing.HistoryEntrySubject.assertAboutHistoryEntries; import static google.registry.testing.TaskQueueHelper.assertDnsTasksEnqueued; +import static google.registry.testing.TaskQueueHelper.assertNoDnsTasksEnqueued; import static google.registry.util.DateTimeUtils.START_OF_TIME; import static org.joda.money.CurrencyUnit.USD; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -496,13 +497,11 @@ class DomainUpdateFlowTest extends ResourceFlowTestCase ds.cloneWithDomainRepoId(resource.getRepoId())) .collect(toImmutableSet())); - - // TODO: REENABLE AFTER PROPER FIX FOR DNS PUBLISHING TASKS IS FOUND - // if (dnsTaskEnqueued) { - // assertDnsTasksEnqueued("example.tld"); - // } else { - // assertNoDnsTasksEnqueued(); - // } + if (dnsTaskEnqueued) { + assertDnsTasksEnqueued("example.tld"); + } else { + assertNoDnsTasksEnqueued(); + } } @Test @@ -1747,4 +1746,51 @@ class DomainUpdateFlowTest extends ResourceFlowTestCase + + + + example.tld + + + + + + + + + ABC-12345 + +