diff --git a/gcloud-java-bigquery/src/main/java/com/google/gcloud/bigquery/BigQueryOptions.java b/gcloud-java-bigquery/src/main/java/com/google/gcloud/bigquery/BigQueryOptions.java index d48cf646f349..325520f34ca6 100644 --- a/gcloud-java-bigquery/src/main/java/com/google/gcloud/bigquery/BigQueryOptions.java +++ b/gcloud-java-bigquery/src/main/java/com/google/gcloud/bigquery/BigQueryOptions.java @@ -17,6 +17,7 @@ package com.google.gcloud.bigquery; import com.google.common.collect.ImmutableSet; +import com.google.gcloud.RetryParams; import com.google.gcloud.ServiceOptions; import com.google.gcloud.bigquery.spi.BigQueryRpc; import com.google.gcloud.bigquery.spi.BigQueryRpcFactory; @@ -108,6 +109,19 @@ public static BigQueryOptions defaultInstance() { return builder().build(); } + @Override + protected RetryParams defaultRetryParams() { + // See https://cloud.google.com/bigquery/sla for backoff requirements + return RetryParams.builder() + .retryMinAttempts(RetryParams.DEFAULT_RETRY_MIN_ATTEMPTS) + .retryMaxAttempts(RetryParams.DEFAULT_RETRY_MAX_ATTEMPTS) + .initialRetryDelayMillis(1000L) + .maxRetryDelayMillis(32000L) + .retryDelayBackoffFactor(2.0) + .totalRetryPeriodMillis(80000L) + .build(); + } + public static Builder builder() { return new Builder(); } diff --git a/gcloud-java-core/src/main/java/com/google/gcloud/ServiceOptions.java b/gcloud-java-core/src/main/java/com/google/gcloud/ServiceOptions.java index d53cfcdafe24..0cab54c34ca8 100644 --- a/gcloud-java-core/src/main/java/com/google/gcloud/ServiceOptions.java +++ b/gcloud-java-core/src/main/java/com/google/gcloud/ServiceOptions.java @@ -333,7 +333,7 @@ protected ServiceOptions(Class> ser authCredentials = builder.authCredentials != null ? builder.authCredentials : defaultAuthCredentials(); authCredentialsState = authCredentials != null ? authCredentials.capture() : null; - retryParams = firstNonNull(builder.retryParams, RetryParams.defaultInstance()); + retryParams = firstNonNull(builder.retryParams, defaultRetryParams()); serviceFactory = firstNonNull(builder.serviceFactory, getFromServiceLoader(serviceFactoryClass, defaultServiceFactory())); serviceFactoryClassName = serviceFactory.getClass().getName(); @@ -655,6 +655,10 @@ private static T newInstance(String className) throws IOException, ClassNotF public abstract > B toBuilder(); + protected RetryParams defaultRetryParams() { + return RetryParams.defaultInstance(); + } + private static T getFromServiceLoader(Class clazz, T defaultInstance) { return Iterables.getFirst(ServiceLoader.load(clazz), defaultInstance); } diff --git a/gcloud-java-datastore/src/main/java/com/google/gcloud/datastore/DatastoreOptions.java b/gcloud-java-datastore/src/main/java/com/google/gcloud/datastore/DatastoreOptions.java index bc0efd837755..01495ec74762 100644 --- a/gcloud-java-datastore/src/main/java/com/google/gcloud/datastore/DatastoreOptions.java +++ b/gcloud-java-datastore/src/main/java/com/google/gcloud/datastore/DatastoreOptions.java @@ -21,6 +21,7 @@ import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; +import com.google.gcloud.RetryParams; import com.google.gcloud.ServiceOptions; import com.google.gcloud.datastore.spi.DatastoreRpc; import com.google.gcloud.datastore.spi.DatastoreRpcFactory; @@ -160,6 +161,19 @@ public String namespace() { return namespace; } + @Override + protected RetryParams defaultRetryParams() { + // See https://cloud.google.com/datastore/sla for backoff requirements + return RetryParams.builder() + .retryMinAttempts(RetryParams.DEFAULT_RETRY_MIN_ATTEMPTS) + .retryMaxAttempts(RetryParams.DEFAULT_RETRY_MAX_ATTEMPTS) + .initialRetryDelayMillis(1000L) + .maxRetryDelayMillis(32000L) + .retryDelayBackoffFactor(2.0) + .totalRetryPeriodMillis(80000L) + .build(); + } + /** * Returns a default {@code DatastoreOptions} instance. */ diff --git a/gcloud-java-storage/src/main/java/com/google/gcloud/storage/StorageOptions.java b/gcloud-java-storage/src/main/java/com/google/gcloud/storage/StorageOptions.java index e7e1c2778fa9..a32d19ec74a5 100644 --- a/gcloud-java-storage/src/main/java/com/google/gcloud/storage/StorageOptions.java +++ b/gcloud-java-storage/src/main/java/com/google/gcloud/storage/StorageOptions.java @@ -17,6 +17,7 @@ package com.google.gcloud.storage; import com.google.common.collect.ImmutableSet; +import com.google.gcloud.RetryParams; import com.google.gcloud.ServiceOptions; import com.google.gcloud.storage.spi.DefaultStorageRpc; import com.google.gcloud.storage.spi.StorageRpc; @@ -93,6 +94,19 @@ public static StorageOptions defaultInstance() { return builder().build(); } + @Override + protected RetryParams defaultRetryParams() { + // See https://cloud.google.com/storage/sla for backoff requirements + return RetryParams.builder() + .retryMinAttempts(RetryParams.DEFAULT_RETRY_MIN_ATTEMPTS) + .retryMaxAttempts(RetryParams.DEFAULT_RETRY_MAX_ATTEMPTS) + .initialRetryDelayMillis(1000L) + .maxRetryDelayMillis(32000L) + .retryDelayBackoffFactor(2.0) + .totalRetryPeriodMillis(80000L) + .build(); + } + @SuppressWarnings("unchecked") @Override public Builder toBuilder() {