diff --git a/java/google/registry/dns/DnsQueue.java b/java/google/registry/dns/DnsQueue.java index b724d52fb..c94f56ec9 100644 --- a/java/google/registry/dns/DnsQueue.java +++ b/java/google/registry/dns/DnsQueue.java @@ -145,8 +145,13 @@ public class DnsQueue { } } - // TODO(b/19483428): Remove me when flows package is ported to Dagger. - /** Creates a new instance. */ + /** + * Creates a new instance. + * + *

Note: Prefer @Injecting DnsQueue instances instead. You should only use + * this helper method in situations for which injection does not work, e.g. inside mapper or + * reducer classes in mapreduces that need to be Serializable. + */ public static DnsQueue create() { DnsQueue result = new DnsQueue(); result.writeLockTimeout = Duration.standardSeconds(120); diff --git a/java/google/registry/flows/FlowComponent.java b/java/google/registry/flows/FlowComponent.java index 27b8c3636..08c2d8f31 100644 --- a/java/google/registry/flows/FlowComponent.java +++ b/java/google/registry/flows/FlowComponent.java @@ -18,6 +18,7 @@ import dagger.Module; import dagger.Provides; import dagger.Subcomponent; import google.registry.config.ConfigModule; +import google.registry.dns.DnsModule; import google.registry.flows.async.AsyncFlowsModule; import google.registry.flows.contact.ContactCheckFlow; import google.registry.flows.contact.ContactCreateFlow; @@ -65,6 +66,7 @@ import google.registry.util.SystemSleeper.SystemSleeperModule; @Subcomponent(modules = { AsyncFlowsModule.class, ConfigModule.class, + DnsModule.class, FlowModule.class, FlowComponent.FlowComponentModule.class, SystemSleeperModule.class}) diff --git a/java/google/registry/flows/domain/DomainCreateOrAllocateFlow.java b/java/google/registry/flows/domain/DomainCreateOrAllocateFlow.java index a834aedeb..4966145f1 100644 --- a/java/google/registry/flows/domain/DomainCreateOrAllocateFlow.java +++ b/java/google/registry/flows/domain/DomainCreateOrAllocateFlow.java @@ -33,6 +33,7 @@ import google.registry.model.eppoutput.CreateData.DomainCreateData; import google.registry.model.eppoutput.EppOutput; import google.registry.model.eppoutput.Result; import google.registry.model.poll.PollMessage; +import javax.inject.Inject; import org.joda.time.DateTime; /** An EPP flow that creates or allocates a new domain resource. */ @@ -41,6 +42,8 @@ public abstract class DomainCreateOrAllocateFlow protected boolean isAnchorTenantViaExtension; + @Inject DnsQueue dnsQueue; + @Override protected final void initDomainCreateFlow() { isAnchorTenantViaExtension = @@ -85,7 +88,7 @@ public abstract class DomainCreateOrAllocateFlow @Override protected final void enqueueTasks() { if (newResource.shouldPublishToDns()) { - DnsQueue.create().addDomainRefreshTask(newResource.getFullyQualifiedDomainName()); + dnsQueue.addDomainRefreshTask(newResource.getFullyQualifiedDomainName()); } enqueueLordnTaskIfNeeded(); } diff --git a/java/google/registry/flows/domain/DomainDeleteFlow.java b/java/google/registry/flows/domain/DomainDeleteFlow.java index 193164ed8..de0a531e9 100644 --- a/java/google/registry/flows/domain/DomainDeleteFlow.java +++ b/java/google/registry/flows/domain/DomainDeleteFlow.java @@ -94,6 +94,7 @@ public final class DomainDeleteFlow extends LoggedInFlow implements Transactiona @Inject @ClientId String clientId; @Inject @TargetId String targetId; @Inject HistoryEntry.Builder historyBuilder; + @Inject DnsQueue dnsQueue; @Inject DomainDeleteFlow() {} @Override @@ -140,7 +141,7 @@ public final class DomainDeleteFlow extends LoggedInFlow implements Transactiona // If there's a pending transfer, the gaining client's autorenew billing // event and poll message will already have been deleted in // ResourceDeleteFlow since it's listed in serverApproveEntities. - DnsQueue.create().addDomainRefreshTask(existingDomain.getFullyQualifiedDomainName()); + dnsQueue.addDomainRefreshTask(existingDomain.getFullyQualifiedDomainName()); // Cancel any grace periods that were still active. for (GracePeriod gracePeriod : existingDomain.getGracePeriods()) { // No cancellation is written if the grace period was not for a billable event. diff --git a/java/google/registry/flows/domain/DomainRestoreRequestFlow.java b/java/google/registry/flows/domain/DomainRestoreRequestFlow.java index de4df42fc..b8207c95f 100644 --- a/java/google/registry/flows/domain/DomainRestoreRequestFlow.java +++ b/java/google/registry/flows/domain/DomainRestoreRequestFlow.java @@ -108,6 +108,7 @@ public final class DomainRestoreRequestFlow extends LoggedInFlow implements Tran @Inject @ClientId String clientId; @Inject @TargetId String targetId; @Inject HistoryEntry.Builder historyBuilder; + @Inject DnsQueue dnsQueue; @Inject DomainRestoreRequestFlow() {} @Override @@ -157,7 +158,7 @@ public final class DomainRestoreRequestFlow extends LoggedInFlow implements Tran entitiesToSave.add(newDomain, historyEntry, autorenewEvent, autorenewPollMessage); ofy().save().entities(entitiesToSave.build()); ofy().delete().key(existingDomain.getDeletePollMessage()); - DnsQueue.create().addDomainRefreshTask(existingDomain.getFullyQualifiedDomainName()); + dnsQueue.addDomainRefreshTask(existingDomain.getFullyQualifiedDomainName()); return createOutput(SUCCESS, null, createResponseExtensions(restoreCost, renewCost, feeUpdate)); } diff --git a/java/google/registry/flows/domain/DomainUpdateFlow.java b/java/google/registry/flows/domain/DomainUpdateFlow.java index 21b6cedb0..4c5b0fb0c 100644 --- a/java/google/registry/flows/domain/DomainUpdateFlow.java +++ b/java/google/registry/flows/domain/DomainUpdateFlow.java @@ -132,6 +132,7 @@ public final class DomainUpdateFlow extends LoggedInFlow implements Transactiona @Inject @ClientId String clientId; @Inject @TargetId String targetId; @Inject HistoryEntry.Builder historyBuilder; + @Inject DnsQueue dnsQueue; @Inject DomainUpdateFlow() {} @Override @@ -159,7 +160,7 @@ public final class DomainUpdateFlow extends LoggedInFlow implements Transactiona } } validateNewState(newDomain); - DnsQueue.create().addDomainRefreshTask(targetId); + dnsQueue.addDomainRefreshTask(targetId); handleExtraFlowLogic(existingDomain, historyEntry); ImmutableList.Builder entitiesToSave = new ImmutableList.Builder<>(); entitiesToSave.add(newDomain, historyEntry); diff --git a/java/google/registry/flows/host/HostCreateFlow.java b/java/google/registry/flows/host/HostCreateFlow.java index a9ef19133..95022cd3d 100644 --- a/java/google/registry/flows/host/HostCreateFlow.java +++ b/java/google/registry/flows/host/HostCreateFlow.java @@ -74,6 +74,7 @@ public final class HostCreateFlow extends LoggedInFlow implements TransactionalF @Inject @ClientId String clientId; @Inject @TargetId String targetId; @Inject HistoryEntry.Builder historyBuilder; + @Inject DnsQueue dnsQueue; @Inject HostCreateFlow() {} @Override @@ -126,7 +127,7 @@ public final class HostCreateFlow extends LoggedInFlow implements TransactionalF .build()); // Only update DNS if this is a subordinate host. External hosts have no glue to write, so // they are only written as NS records from the referencing domain. - DnsQueue.create().addHostRefreshTask(targetId); + dnsQueue.addHostRefreshTask(targetId); } ofy().save().entities(entitiesToSave); return createOutput(SUCCESS, HostCreateData.create(targetId, now)); diff --git a/java/google/registry/flows/host/HostUpdateFlow.java b/java/google/registry/flows/host/HostUpdateFlow.java index 42a53b408..868e60fb6 100644 --- a/java/google/registry/flows/host/HostUpdateFlow.java +++ b/java/google/registry/flows/host/HostUpdateFlow.java @@ -105,6 +105,7 @@ public final class HostUpdateFlow extends LoggedInFlow implements TransactionalF @Inject @TargetId String targetId; @Inject HistoryEntry.Builder historyBuilder; @Inject AsyncFlowEnqueuer asyncFlowEnqueuer; + @Inject DnsQueue dnsQueue; @Inject HostUpdateFlow() {} @Override @@ -219,14 +220,14 @@ public final class HostUpdateFlow extends LoggedInFlow implements TransactionalF // Only update DNS for subordinate hosts. External hosts have no glue to write, so they // are only written as NS records from the referencing domain. if (existingResource.getSuperordinateDomain() != null) { - DnsQueue.create().addHostRefreshTask(existingResource.getFullyQualifiedHostName()); + dnsQueue.addHostRefreshTask(existingResource.getFullyQualifiedHostName()); } // In case of a rename, there are many updates we need to queue up. if (((Update) resourceCommand).getInnerChange().getFullyQualifiedHostName() != null) { // If the renamed host is also subordinate, then we must enqueue an update to write the new // glue. if (newResource.getSuperordinateDomain() != null) { - DnsQueue.create().addHostRefreshTask(newResource.getFullyQualifiedHostName()); + dnsQueue.addHostRefreshTask(newResource.getFullyQualifiedHostName()); } // We must also enqueue updates for all domains that use this host as their nameserver so // that their NS records can be updated to point at the new name. diff --git a/java/google/registry/module/frontend/BUILD b/java/google/registry/module/frontend/BUILD index 368d00306..587bb0c64 100644 --- a/java/google/registry/module/frontend/BUILD +++ b/java/google/registry/module/frontend/BUILD @@ -18,6 +18,7 @@ java_library( "//third_party/java/servlet/servlet_api", "//java/google/registry/braintree", "//java/google/registry/config", + "//java/google/registry/dns", "//java/google/registry/flows", "//java/google/registry/keyring/api", "//java/google/registry/monitoring/metrics", diff --git a/java/google/registry/module/frontend/FrontendRequestComponent.java b/java/google/registry/module/frontend/FrontendRequestComponent.java index 5fd2d510f..c1e506191 100644 --- a/java/google/registry/module/frontend/FrontendRequestComponent.java +++ b/java/google/registry/module/frontend/FrontendRequestComponent.java @@ -15,6 +15,7 @@ package google.registry.module.frontend; import dagger.Subcomponent; +import google.registry.dns.DnsModule; import google.registry.flows.CheckApiAction; import google.registry.flows.CheckApiAction.CheckApiModule; import google.registry.flows.EppConsoleAction; @@ -47,6 +48,7 @@ import google.registry.whois.WhoisServer; @Subcomponent( modules = { CheckApiModule.class, + DnsModule.class, EppTlsModule.class, RdapModule.class, RegistrarUserModule.class, diff --git a/java/google/registry/module/tools/BUILD b/java/google/registry/module/tools/BUILD index e24b0e0e2..909d68676 100644 --- a/java/google/registry/module/tools/BUILD +++ b/java/google/registry/module/tools/BUILD @@ -17,6 +17,7 @@ java_library( "//third_party/java/jsr330_inject", "//third_party/java/servlet/servlet_api", "//java/google/registry/config", + "//java/google/registry/dns", "//java/google/registry/export", "//java/google/registry/flows", "//java/google/registry/gcs", diff --git a/java/google/registry/module/tools/ToolsRequestComponent.java b/java/google/registry/module/tools/ToolsRequestComponent.java index 2c3793c3b..a4636612d 100644 --- a/java/google/registry/module/tools/ToolsRequestComponent.java +++ b/java/google/registry/module/tools/ToolsRequestComponent.java @@ -15,6 +15,7 @@ package google.registry.module.tools; import dagger.Subcomponent; +import google.registry.dns.DnsModule; import google.registry.export.PublishDetailReportAction; import google.registry.flows.EppToolAction; import google.registry.flows.EppToolAction.EppToolModule; @@ -49,6 +50,7 @@ import google.registry.tools.server.javascrap.RefreshAllDomainsAction; @RequestScope @Subcomponent( modules = { + DnsModule.class, EppToolModule.class, LoadTestModule.class, MapreduceModule.class, diff --git a/java/google/registry/tools/server/CreateOrUpdatePremiumListAction.java b/java/google/registry/tools/server/CreateOrUpdatePremiumListAction.java index b9c12411c..96014ef05 100644 --- a/java/google/registry/tools/server/CreateOrUpdatePremiumListAction.java +++ b/java/google/registry/tools/server/CreateOrUpdatePremiumListAction.java @@ -31,7 +31,7 @@ public abstract class CreateOrUpdatePremiumListAction implements Runnable { public static final String INPUT_PARAM = "inputData"; @Inject JsonResponse response; - @Inject @Parameter(NAME_PARAM) String name; + @Inject @Parameter("premiumListName") String name; @Inject @Parameter(INPUT_PARAM) String inputData; @Override diff --git a/java/google/registry/tools/server/ToolsServerModule.java b/java/google/registry/tools/server/ToolsServerModule.java index 18288f8ac..59f567f90 100644 --- a/java/google/registry/tools/server/ToolsServerModule.java +++ b/java/google/registry/tools/server/ToolsServerModule.java @@ -57,7 +57,7 @@ public class ToolsServerModule { } @Provides - @Parameter("name") + @Parameter("premiumListName") static String provideName(HttpServletRequest req) { return extractRequiredParameter(req, CreatePremiumListAction.NAME_PARAM); } diff --git a/java/google/registry/tools/server/javascrap/RefreshAllDomainsAction.java b/java/google/registry/tools/server/javascrap/RefreshAllDomainsAction.java index 553e8622d..eb45c74ed 100644 --- a/java/google/registry/tools/server/javascrap/RefreshAllDomainsAction.java +++ b/java/google/registry/tools/server/javascrap/RefreshAllDomainsAction.java @@ -36,8 +36,6 @@ public class RefreshAllDomainsAction implements Runnable { private static final FormattingLogger logger = FormattingLogger.getLoggerForCallerClass(); - private static DnsQueue dnsQueue = DnsQueue.create(); - @Inject MapreduceRunner mrRunner; @Inject Response response; @Inject RefreshAllDomainsAction() {} @@ -58,6 +56,7 @@ public class RefreshAllDomainsAction implements Runnable { /** Mapper to refresh all active domain resources. */ public static class RefreshAllDomainsActionMapper extends Mapper { + private static final DnsQueue dnsQueue = DnsQueue.create(); private static final long serialVersionUID = 1356876487351666133L; @Override diff --git a/javatests/google/registry/dns/ReadDnsQueueActionTest.java b/javatests/google/registry/dns/ReadDnsQueueActionTest.java index fbc3337f4..20b8ca21d 100644 --- a/javatests/google/registry/dns/ReadDnsQueueActionTest.java +++ b/javatests/google/registry/dns/ReadDnsQueueActionTest.java @@ -14,8 +14,10 @@ package google.registry.dns; +import static com.google.appengine.api.taskqueue.QueueFactory.getQueue; import static com.google.common.collect.Lists.transform; import static google.registry.dns.DnsConstants.DNS_PUBLISH_PUSH_QUEUE_NAME; +import static google.registry.dns.DnsConstants.DNS_PULL_QUEUE_NAME; import static google.registry.dns.DnsConstants.DNS_TARGET_NAME_PARAM; import static google.registry.dns.DnsConstants.DNS_TARGET_TYPE_PARAM; import static google.registry.request.RequestParameters.PARAM_TLD; @@ -84,7 +86,8 @@ public class ReadDnsQueueActionTest { clock.setTo(DateTime.now(DateTimeZone.UTC)); createTlds("com", "net", "example"); persistResource(Registry.get("example").asBuilder().setTldType(TldType.TEST).build()); - dnsQueue = DnsQueue.create(); + dnsQueue = new DnsQueue(); + dnsQueue.queue = getQueue(DNS_PULL_QUEUE_NAME); dnsQueue.writeLockTimeout = Duration.standardSeconds(10); } diff --git a/javatests/google/registry/flows/EppTestComponent.java b/javatests/google/registry/flows/EppTestComponent.java index 14e319cd4..a312ca65d 100644 --- a/javatests/google/registry/flows/EppTestComponent.java +++ b/javatests/google/registry/flows/EppTestComponent.java @@ -22,6 +22,7 @@ import dagger.Module; import dagger.Provides; import dagger.Subcomponent; import google.registry.config.ConfigModule; +import google.registry.dns.DnsQueue; import google.registry.monitoring.whitebox.BigQueryMetricsEnqueuer; import google.registry.monitoring.whitebox.EppMetric; import google.registry.request.RequestScope; @@ -43,13 +44,16 @@ interface EppTestComponent { /** Module for injecting fakes and mocks. */ @Module static class FakesAndMocksModule { + final FakeClock clock; - final EppMetric.Builder metricBuilder; + final DnsQueue dnsQueue; final BigQueryMetricsEnqueuer metricsEnqueuer; + final EppMetric.Builder metricBuilder; final ModulesService modulesService; FakesAndMocksModule(FakeClock clock) { this.clock = clock; + this.dnsQueue = DnsQueue.create(); this.metricBuilder = EppMetric.builderForRequest("request-id-1", clock); this.modulesService = mock(ModulesService.class); this.metricsEnqueuer = mock(BigQueryMetricsEnqueuer.class); @@ -60,6 +64,11 @@ interface EppTestComponent { return clock; } + @Provides + DnsQueue provideDnsQueue() { + return dnsQueue; + } + @Provides EppMetric.Builder provideMetrics() { return metricBuilder;