• Michael Hanselmann's avatar
    RAPI client: Switch to pycURL · 2a7c3583
    Michael Hanselmann authored
    Currently the RAPI client uses the urllib2 and httplib modules from
    Python's standard library. They're used with pyOpenSSL in a very fragile
    way, and there are known issues when receiving large responses from a RAPI
    server.
    
    By switching to PycURL we leverage the power and stability of the
    widely-used curl library (libcurl). This brings us much more flexibility
    than before, and timeouts were easily implemented (something that would
    have involved a lot of work with the built-in modules).
    
    There's one small drawback: Programs using libcurl have to call
    curl_global_init(3) (available as pycurl.global_init) while exactly one
    thread is running (e.g. before other threads) and are supposed to call
    curl_global_cleanup(3) (available as pycurl.global_cleanup) upon exiting.
    See the manpages for details. A decorator is provided to simplify this.
    
    Unittests for the new code are provided, increasing the test coverage of
    the RAPI client from 74% to 89%.
    Signed-off-by: default avatarMichael Hanselmann <hansmi@google.com>
    Reviewed-by: default avatarGuido Trotter <ultrotter@google.com>
    Reviewed-by: default avatarIustin Pop <iustin@google.com>
    2a7c3583
ganeti.rapi.client_unittest.py 27.2 KB