Hi Giovanni, Currently there is no explicit retry handler for rate limit errors in Rackspace, but it is something that could be implemented. The DigitalOcean fixes it in quite an elegant way, and I'm pretty sure a similar approach could be aded for Rackspace. I'll try to summarise the relevant bits from the DigitalOcean provider so you can try to follow the same pattern:
* First, it declares the DigitalOcean2RateLimitModule [1] that registers a custom error handler for retry limit errors. This module is not configured by default, but users willing to use the automatic rate-limit retry mechanism, can add it to the list of modules when creating the context; that's all it requires from a user's perspective. * Second, the declared RateLimitRetryHandler [2] inspects the request and decides if the error should be propagated or the request should be retried, and when. Note that retry handlers in jclouds work "at HTTP level". That means they are transparent to the provider API method calls. Once call to an interface API method could end up in several HTTP requests or retries, being the rate limit retries some of them. The good thing about this approach is that is transparent to the API and the existing code. * Finally, the DigitalOcean2ErrorHandler [3] propagates a custom rate-limit exception, when the request can't be retried any more, or the user hasn't configured the rate limit module and rate limit errors are just raised. That exception contains detailed information about the rate limit error and allows users to manually handle rate-limit errors, if needed. With these pieces in place it shouldn't be very difficult to implement the same for Rackspace, and I would love to see a pull request for this! If you're up to trying to implement it, I'll be happy to help. I. [1] https://github.com/jclouds/jclouds/blob/master/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOcean2RateLimitModule.java [2] https://github.com/jclouds/jclouds/blob/master/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/handlers/RateLimitRetryHandler.java [3] https://github.com/jclouds/jclouds/blob/master/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/handlers/DigitalOcean2ErrorHandler.java#L66-L68 On 24 February 2016 at 15:35, Giovanni Toraldo <giovanni.tora...@cloudesire.com> wrote: > Hi guys, > > I've just hit a rate limit error while using rackspace dns service: > > org.jclouds.http.HttpResponseException: command: GET > https://lon.dns.api.rackspacecloud.com/v1.0/10040650/domains/4433011?showRecords=true&showSubdomains=true > HTTP/1.1 failed with response: HTTP/1.1 413 Request Entity Too Large; > content: [{ > "overLimit" : { > "code" : 413, > "message" : "OverLimit Retry...", > "details" : "Error Details...", > "retryAfter" : "2016-02-24T14:25:57Z" > } > }] > > full stacktrace https://gist.github.com/gionn/2b32e8734749a71490c3 > > Is there an easy way to implement a simple retry feature, maybe using > the suggested retryAfter field of the error response? > > Thanks. > > -- > Giovanni Toraldo > Lead Developer > https://cloudesire.com