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 @Inject
ing 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;