Make dependency injection and construction of DnsQueue nicer

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146783008
This commit is contained in:
mcilwain 2017-02-07 07:12:05 -08:00 committed by Ben McIlwain
parent 7986be139d
commit f212a53232
4 changed files with 33 additions and 30 deletions

View file

@ -14,6 +14,7 @@
package google.registry.dns;
import static com.google.appengine.api.taskqueue.QueueFactory.getQueue;
import static com.google.common.base.Preconditions.checkArgument;
import static google.registry.dns.DnsConstants.DNS_PULL_QUEUE_NAME;
import static google.registry.dns.DnsConstants.DNS_TARGET_NAME_PARAM;
@ -25,7 +26,6 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS;
import com.google.appengine.api.taskqueue.Queue;
import com.google.appengine.api.taskqueue.QueueConstants;
import com.google.appengine.api.taskqueue.QueueFactory;
import com.google.appengine.api.taskqueue.TaskHandle;
import com.google.appengine.api.taskqueue.TaskOptions;
import com.google.appengine.api.taskqueue.TaskOptions.Method;
@ -48,8 +48,23 @@ public class DnsQueue {
private static final FormattingLogger logger = FormattingLogger.getLoggerForCallerClass();
@Inject @Named(DNS_PULL_QUEUE_NAME) Queue queue;
@Inject DnsQueue() {}
private final Queue queue;
@Inject
public DnsQueue(@Named(DNS_PULL_QUEUE_NAME) Queue queue) {
this.queue = queue;
}
/**
* Constructs a new instance.
*
* <p><b>Note:</b> Prefer <code>@Inject</code>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() {
return new DnsQueue(getQueue(DNS_PULL_QUEUE_NAME));
}
long writeBatchSize = QueueConstants.maxLeaseCount();
@ -127,17 +142,4 @@ public class DnsQueue {
logger.severe(e, "Failed deleting tasks too fast");
}
}
/**
* Creates a new instance.
*
* <p><b>Note:</b> Prefer <code>@Inject</code>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.queue = QueueFactory.getQueue(DNS_PULL_QUEUE_NAME);
return result;
}
}

View file

@ -41,6 +41,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.net.InternetDomainName;
import com.googlecode.objectify.Key;
import dagger.Lazy;
import google.registry.dns.DnsQueue;
import google.registry.flows.EppException;
import google.registry.flows.EppException.AuthorizationErrorException;
@ -109,6 +110,7 @@ public class DomainAllocateFlow implements TransactionalFlow {
@Inject @Superuser boolean isSuperuser;
@Inject HistoryEntry.Builder historyBuilder;
@Inject EppInput eppInput;
@Inject Lazy<DnsQueue> dnsQueue;
@Inject EppResponse.Builder responseBuilder;
@Inject DomainPricingLogic pricingLogic;
@Inject DomainAllocateFlow() {}
@ -360,7 +362,7 @@ public class DomainAllocateFlow implements TransactionalFlow {
private void enqueueTasks(AllocateCreateExtension allocateCreate, DomainResource newDomain) {
if (newDomain.shouldPublishToDns()) {
DnsQueue.create().addDomainRefreshTask(newDomain.getFullyQualifiedDomainName());
dnsQueue.get().addDomainRefreshTask(newDomain.getFullyQualifiedDomainName());
}
if (allocateCreate.getSmdId() != null || allocateCreate.getNotice() != null) {
LordnTask.enqueueDomainResourceTask(newDomain);

View file

@ -14,7 +14,6 @@
package google.registry.dns;
import static com.google.appengine.api.taskqueue.QueueFactory.getQueue;
import static google.registry.testing.DatastoreHelper.createTld;
import static google.registry.testing.TaskQueueHelper.assertNoTasksEnqueued;
import static google.registry.testing.TaskQueueHelper.assertTasksEnqueued;
@ -45,8 +44,7 @@ public class DnsQueueTest {
@Before
public void init() {
dnsQueue = new DnsQueue();
dnsQueue.queue = getQueue("dns-pull");
dnsQueue = DnsQueue.create();
dnsQueue.writeBatchSize = 10;
}

View file

@ -86,8 +86,7 @@ public class ReadDnsQueueActionTest {
clock.setTo(DateTime.now(DateTimeZone.UTC));
createTlds("com", "net", "example");
persistResource(Registry.get("example").asBuilder().setTldType(TldType.TEST).build());
dnsQueue = new DnsQueue();
dnsQueue.queue = getQueue(DNS_PULL_QUEUE_NAME);
dnsQueue = DnsQueue.create();
}
private void run(boolean keepTasks) throws Exception {
@ -132,7 +131,7 @@ public class ReadDnsQueueActionTest {
dnsQueue.addDomainRefreshTask("domain.net");
dnsQueue.addDomainRefreshTask("domain.example");
run(false);
assertNoTasksEnqueued(DnsConstants.DNS_PULL_QUEUE_NAME);
assertNoTasksEnqueued(DNS_PULL_QUEUE_NAME);
assertTasksEnqueued(
DNS_PUBLISH_PUSH_QUEUE_NAME,
new TaskMatcher().method("POST"),
@ -146,7 +145,7 @@ public class ReadDnsQueueActionTest {
dnsQueue.addDomainRefreshTask("domain.net");
dnsQueue.addDomainRefreshTask("domain.example");
run(false);
assertNoTasksEnqueued(DnsConstants.DNS_PULL_QUEUE_NAME);
assertNoTasksEnqueued(DNS_PULL_QUEUE_NAME);
assertTldsEnqueuedInPushQueue("com", "net", "example");
}
@ -157,7 +156,7 @@ public class ReadDnsQueueActionTest {
dnsQueue.addDomainRefreshTask("domain.example");
run(true);
assertTasksEnqueued(
DnsConstants.DNS_PULL_QUEUE_NAME,
DNS_PULL_QUEUE_NAME,
new TaskMatcher().payload("Target-Type=DOMAIN&Target-Name=domain.com&tld=com"),
new TaskMatcher().payload("Target-Type=DOMAIN&Target-Name=domain.net&tld=net"),
new TaskMatcher().payload("Target-Type=DOMAIN&Target-Name=domain.example&tld=example"));
@ -171,7 +170,7 @@ public class ReadDnsQueueActionTest {
dnsQueue.addDomainRefreshTask("domain.net");
dnsQueue.addDomainRefreshTask("domain.example");
run(false);
assertTasksEnqueued(DnsConstants.DNS_PULL_QUEUE_NAME, new TaskMatcher());
assertTasksEnqueued(DNS_PULL_QUEUE_NAME, new TaskMatcher());
assertTldsEnqueuedInPushQueue("com", "example");
}
@ -181,7 +180,7 @@ public class ReadDnsQueueActionTest {
dnsQueue.addDomainRefreshTask("domain.net");
dnsQueue.addZoneRefreshTask("example");
run(false);
assertNoTasksEnqueued(DnsConstants.DNS_PULL_QUEUE_NAME);
assertNoTasksEnqueued(DNS_PULL_QUEUE_NAME);
assertTasksEnqueued(DNS_PUBLISH_PUSH_QUEUE_NAME,
new TaskMatcher()
.url(PublishDnsUpdatesAction.PATH)
@ -213,11 +212,13 @@ public class ReadDnsQueueActionTest {
task.param("domains", domainName);
break;
case 1:
dnsQueue.queue.add(createRefreshTask("ns1." + domainName, TargetType.HOST));
getQueue(DNS_PULL_QUEUE_NAME)
.add(createRefreshTask("ns1." + domainName, TargetType.HOST));
task.param("hosts", "ns1." + domainName);
break;
case 2:
dnsQueue.queue.add(createRefreshTask("ns2." + domainName, TargetType.HOST));
getQueue(DNS_PULL_QUEUE_NAME)
.add(createRefreshTask("ns2." + domainName, TargetType.HOST));
task.param("hosts", "ns2." + domainName);
break;
}
@ -231,7 +232,7 @@ public class ReadDnsQueueActionTest {
}
}
run(false);
assertNoTasksEnqueued(DnsConstants.DNS_PULL_QUEUE_NAME);
assertNoTasksEnqueued(DNS_PULL_QUEUE_NAME);
assertTasksEnqueued(DNS_PUBLISH_PUSH_QUEUE_NAME, expectedTasks);
}
}