Inject RateLimiter in CloudDnsWriter

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136055927
This commit is contained in:
mcilwain 2016-10-13 10:27:24 -07:00 committed by Ben McIlwain
parent 70afce13fe
commit 7b9ce8e087
4 changed files with 17 additions and 6 deletions

View file

@ -20,6 +20,7 @@ import com.google.api.client.json.JsonFactory;
import com.google.api.services.dns.Dns;
import com.google.api.services.dns.DnsScopes;
import com.google.common.base.Function;
import com.google.common.util.concurrent.RateLimiter;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
@ -58,4 +59,13 @@ public final class CloudDnsModule {
static String provideWriterName() {
return CloudDnsWriter.NAME;
}
@Provides
@Named("cloudDns")
static RateLimiter provideRateLimiter() {
// This is the default max QPS for Cloud DNS. It can be increased by contacting the team
// via the Quotas page on the Cloud Console.
int cloudDnsMaxQps = 20;
return RateLimiter.create(cloudDnsMaxQps);
}
}

View file

@ -50,6 +50,7 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
import javax.inject.Inject;
import javax.inject.Named;
import org.joda.time.Duration;
/**
@ -66,16 +67,11 @@ class CloudDnsWriter implements DnsWriter {
public static final String NAME = "CloudDnsWriter";
private static final FormattingLogger logger = FormattingLogger.getLoggerForCallerClass();
// This is the default max QPS for Cloud DNS. It can be increased by contacting the team
// via the Quotas page on the Cloud Console.
// TODO(shikhman): inject the RateLimiter
private static final int CLOUD_DNS_MAX_QPS = 20;
private static final RateLimiter rateLimiter = RateLimiter.create(CLOUD_DNS_MAX_QPS);
private static final ImmutableSet<String> RETRYABLE_EXCEPTION_REASONS =
ImmutableSet.of("preconditionFailed", "notFound", "alreadyExists");
private final Clock clock;
private final RateLimiter rateLimiter;
// TODO(shikhman): This uses @Config("transientFailureRetries") which may not be tuned for this
// application.
private final Retrier retrier;
@ -92,12 +88,14 @@ class CloudDnsWriter implements DnsWriter {
@Config("projectId") String projectId,
@DnsWriterZone String zoneName,
@Config("dnsDefaultTtl") Duration defaultTtl,
@Named("cloudDns") RateLimiter rateLimiter,
Clock clock,
Retrier retrier) {
this.dnsConnection = dnsConnection;
this.projectId = projectId;
this.zoneName = zoneName;
this.defaultTtl = defaultTtl;
this.rateLimiter = rateLimiter;
this.clock = clock;
this.retrier = retrier;
}

View file

@ -17,6 +17,7 @@ java_library(
"//java/com/google/common/collect",
"//java/com/google/common/io",
"//java/com/google/common/net",
"//java/com/google/common/util/concurrent",
"//third_party/java/joda_time",
"//third_party/java/jsr305_annotations",
"//third_party/java/jsr330_inject",

View file

@ -37,6 +37,7 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.google.common.net.InetAddresses;
import com.google.common.util.concurrent.RateLimiter;
import com.googlecode.objectify.Key;
import google.registry.dns.writer.clouddns.CloudDnsWriter.ZoneStateException;
import google.registry.model.domain.DomainResource;
@ -101,6 +102,7 @@ public class CloudDnsWriterTest {
"projectId",
"zoneName",
DEFAULT_TTL,
RateLimiter.create(20),
new SystemClock(),
new Retrier(new SystemSleeper(), 5));