mirror of
https://github.com/google/nomulus.git
synced 2025-05-18 02:09:35 +02:00
Inject RateLimiter in CloudDnsWriter
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=136055927
This commit is contained in:
parent
70afce13fe
commit
7b9ce8e087
4 changed files with 17 additions and 6 deletions
|
@ -20,6 +20,7 @@ import com.google.api.client.json.JsonFactory;
|
||||||
import com.google.api.services.dns.Dns;
|
import com.google.api.services.dns.Dns;
|
||||||
import com.google.api.services.dns.DnsScopes;
|
import com.google.api.services.dns.DnsScopes;
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
|
import com.google.common.util.concurrent.RateLimiter;
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
import dagger.multibindings.IntoMap;
|
import dagger.multibindings.IntoMap;
|
||||||
|
@ -58,4 +59,13 @@ public final class CloudDnsModule {
|
||||||
static String provideWriterName() {
|
static String provideWriterName() {
|
||||||
return CloudDnsWriter.NAME;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,7 @@ import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
import org.joda.time.Duration;
|
import org.joda.time.Duration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -66,16 +67,11 @@ class CloudDnsWriter implements DnsWriter {
|
||||||
public static final String NAME = "CloudDnsWriter";
|
public static final String NAME = "CloudDnsWriter";
|
||||||
|
|
||||||
private static final FormattingLogger logger = FormattingLogger.getLoggerForCallerClass();
|
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 =
|
private static final ImmutableSet<String> RETRYABLE_EXCEPTION_REASONS =
|
||||||
ImmutableSet.of("preconditionFailed", "notFound", "alreadyExists");
|
ImmutableSet.of("preconditionFailed", "notFound", "alreadyExists");
|
||||||
|
|
||||||
private final Clock clock;
|
private final Clock clock;
|
||||||
|
private final RateLimiter rateLimiter;
|
||||||
// TODO(shikhman): This uses @Config("transientFailureRetries") which may not be tuned for this
|
// TODO(shikhman): This uses @Config("transientFailureRetries") which may not be tuned for this
|
||||||
// application.
|
// application.
|
||||||
private final Retrier retrier;
|
private final Retrier retrier;
|
||||||
|
@ -92,12 +88,14 @@ class CloudDnsWriter implements DnsWriter {
|
||||||
@Config("projectId") String projectId,
|
@Config("projectId") String projectId,
|
||||||
@DnsWriterZone String zoneName,
|
@DnsWriterZone String zoneName,
|
||||||
@Config("dnsDefaultTtl") Duration defaultTtl,
|
@Config("dnsDefaultTtl") Duration defaultTtl,
|
||||||
|
@Named("cloudDns") RateLimiter rateLimiter,
|
||||||
Clock clock,
|
Clock clock,
|
||||||
Retrier retrier) {
|
Retrier retrier) {
|
||||||
this.dnsConnection = dnsConnection;
|
this.dnsConnection = dnsConnection;
|
||||||
this.projectId = projectId;
|
this.projectId = projectId;
|
||||||
this.zoneName = zoneName;
|
this.zoneName = zoneName;
|
||||||
this.defaultTtl = defaultTtl;
|
this.defaultTtl = defaultTtl;
|
||||||
|
this.rateLimiter = rateLimiter;
|
||||||
this.clock = clock;
|
this.clock = clock;
|
||||||
this.retrier = retrier;
|
this.retrier = retrier;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ java_library(
|
||||||
"//java/com/google/common/collect",
|
"//java/com/google/common/collect",
|
||||||
"//java/com/google/common/io",
|
"//java/com/google/common/io",
|
||||||
"//java/com/google/common/net",
|
"//java/com/google/common/net",
|
||||||
|
"//java/com/google/common/util/concurrent",
|
||||||
"//third_party/java/joda_time",
|
"//third_party/java/joda_time",
|
||||||
"//third_party/java/jsr305_annotations",
|
"//third_party/java/jsr305_annotations",
|
||||||
"//third_party/java/jsr330_inject",
|
"//third_party/java/jsr330_inject",
|
||||||
|
|
|
@ -37,6 +37,7 @@ import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.google.common.net.InetAddresses;
|
import com.google.common.net.InetAddresses;
|
||||||
|
import com.google.common.util.concurrent.RateLimiter;
|
||||||
import com.googlecode.objectify.Key;
|
import com.googlecode.objectify.Key;
|
||||||
import google.registry.dns.writer.clouddns.CloudDnsWriter.ZoneStateException;
|
import google.registry.dns.writer.clouddns.CloudDnsWriter.ZoneStateException;
|
||||||
import google.registry.model.domain.DomainResource;
|
import google.registry.model.domain.DomainResource;
|
||||||
|
@ -101,6 +102,7 @@ public class CloudDnsWriterTest {
|
||||||
"projectId",
|
"projectId",
|
||||||
"zoneName",
|
"zoneName",
|
||||||
DEFAULT_TTL,
|
DEFAULT_TTL,
|
||||||
|
RateLimiter.create(20),
|
||||||
new SystemClock(),
|
new SystemClock(),
|
||||||
new Retrier(new SystemSleeper(), 5));
|
new Retrier(new SystemSleeper(), 5));
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue