GitHub user fjros opened a pull request:

    https://github.com/apache/libcloud/pull/1058

    Handle Vultr API rate-limit

    ## Handle Vultr API rate-limit
    
    ### Description
    
    Vultr API imposes a rate limit of 2 requests/sec (actually they provide 
some leeway, but let's stick with the official documentation). A typical 
workflow for a libcloud's client that wants to launch a Vultr node could 
involve something like the following:
    
    1. driver.list_locations()
    2. driver.list_sizes()
    3. driver.list_images()
    4. driver.list_key_pairs()
    5. driver.create_key_pair(name, key)
    6. driver.create_node(...)
    
    Even a synchronous client will exceed the rate limit easily.
    
    This PR makes Vultr compute driver handle rate-limiting in two ways:
    
    1. Minimize the likelihood of being rate-limited by not authenticating 
requests that don't require an api key. Such requests aren't rate-limited.
    2. If hit by the rate limit, retry the request. A `rate_limited` decorator 
is in charge of automatically retrying the request after a sleep period when a 
503 Service Unavailable response is received.
    
    In order to implement (1), this PR first updates the way the driver 
authenticates with Vultr. Now it uses an HTTP header (as described in current 
api docs: https://www.vultr.com/api/) instead of a query parameter.
    
    ### Status
    
    - done, ready for review
    
    ### Checklist (tick everything that applies)
    
    - [ ] [Code 
linting](http://libcloud.readthedocs.org/en/latest/development.html#code-style-guide)
 (required, can be done after the PR checks)
    - [ ] Documentation
    - [ ] [Tests](http://libcloud.readthedocs.org/en/latest/testing.html)
    - [ ] 
[ICLA](http://libcloud.readthedocs.org/en/latest/development.html#contributing-bigger-changes)
 (required for bigger changes)

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/fjros/libcloud vultr-rate-limit

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/libcloud/pull/1058.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1058
    
----
commit 413990ad52b637763dacdf4331eeb2c94ce155d1
Author: Francisco Ros <fj...@doalitic.com>
Date:   2017-05-23T15:01:50Z

    Vultr driver authenticates with api key using header instead of query param
    
    This aligns with current api docs: https://www.vultr.com/api/

commit 566dc9fa6f71adc41d07e32f1fd7248352a67f46
Author: Francisco Ros <fj...@doalitic.com>
Date:   2017-05-23T16:10:22Z

    Vultr compute driver doesn't authenticate calls that don't need it
    
    This minimizes the likelihood of hitting the rate-limit of Vultr api.

commit 1749cc6589640b78b485ee0f3de89664f0021ef2
Author: Francisco Ros <fj...@doalitic.com>
Date:   2017-05-24T07:00:53Z

    Add class ServiceUnavailableError for HTTP 503 return codes

commit cba9b0cbfe193fe5678c8cb22a8230c21c3df600
Author: Francisco Ros <fj...@doalitic.com>
Date:   2017-05-24T07:03:10Z

    Retry requests that have been rate-limited in Vultr compute driver

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to