All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.azure.cosmos.ThrottlingRetryOptions Maven / Gradle / Ivy

Go to download

This Package contains Microsoft Azure Cosmos SDK (with Reactive Extension Reactor support) for Azure Cosmos DB SQL API

There is a newer version: 4.61.1
Show newest version
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.cosmos;

import java.time.Duration;

/**
 * Encapsulates retry options in the Azure Cosmos DB database service.
 */
public final class ThrottlingRetryOptions {
    private int maxRetryAttemptsOnThrottledRequests;
    private Duration maxRetryWaitTime;

    /**
     * Creates a new instance of the RetryOptions class and initializes all
     * properties to default values.
     */
    public ThrottlingRetryOptions() {
        this.maxRetryAttemptsOnThrottledRequests = 9;
        this.maxRetryWaitTime = Duration.ofSeconds(30);
    }

    /**
     * Gets the maximum number of retries in the case where the request fails
     * because the service has applied rate limiting on the client.
     *
     * @return the maximum number of retries.
     */
    public int getMaxRetryAttemptsOnThrottledRequests() {
        return this.maxRetryAttemptsOnThrottledRequests;
    }

    /**
     * Sets the maximum number of retries in the case where the request fails
     * because the service has applied rate limiting on the client.
     * 

* When a client is sending requests faster than the allowed rate, the * service will return HttpStatusCode 429 (Too Many Request) to throttle the * client. The current implementation in the SDK will then wait for the * amount of time the service tells it to wait and retry after the time has * elapsed. *

* The default value is 9. This means in the case where the request is * throttled, the same request will be issued for a maximum of 10 times to * the server before an error is returned to the application. * * @param maxRetryAttemptsOnThrottledRequests the max number of retry attempts on failed requests due to a * throttle error. * @return the RetryOptions. * @throws IllegalArgumentException thrown if an error occurs */ public ThrottlingRetryOptions setMaxRetryAttemptsOnThrottledRequests(int maxRetryAttemptsOnThrottledRequests) { if (maxRetryAttemptsOnThrottledRequests < 0) { throw new IllegalArgumentException("maxRetryAttemptsOnThrottledRequests value must be a positive integer."); } this.maxRetryAttemptsOnThrottledRequests = maxRetryAttemptsOnThrottledRequests; return this; } /** * Gets the maximum retry duration. * * @return the maximum retry duration. */ public Duration getMaxRetryWaitTime() { return this.maxRetryWaitTime; } /** * Sets the maximum retry time in seconds. *

* When a request fails due to a throttle error, the service sends back a * response that contains a value indicating the client should not retry * before the time period has elapsed (Retry-After). The MaxRetryWaitTime * flag allows the application to set a maximum wait time for all retry * attempts. If the cumulative wait time exceeds the MaxRetryWaitTime, the * SDK will stop retrying and return the error to the application. *

* The default value is 30 seconds. * * @param maxRetryWaitTime the maximum duration a request will be retried. * @return the RetryOptions. * @throws IllegalArgumentException thrown if an error occurs */ public ThrottlingRetryOptions setMaxRetryWaitTime(Duration maxRetryWaitTime) { if (maxRetryWaitTime.getSeconds() < 0 || maxRetryWaitTime.getSeconds() > Integer.MAX_VALUE / 1000) { throw new IllegalArgumentException( "value must be a positive integer between the range of 0 to " + Integer.MAX_VALUE / 1000); } this.maxRetryWaitTime = maxRetryWaitTime; return this; } @Override public String toString() { return "RetryOptions{" + "maxRetryAttemptsOnThrottledRequests=" + maxRetryAttemptsOnThrottledRequests + ", maxRetryWaitTime=" + maxRetryWaitTime + '}'; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy