RAPI client: Switch to pycURL
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:Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
Showing
- INSTALL 3 additions, 1 deletionINSTALL
- daemons/ganeti-watcher 4 additions, 4 deletionsdaemons/ganeti-watcher
- lib/rapi/client.py 200 additions, 270 deletionslib/rapi/client.py
- qa/ganeti-qa.py 4 additions, 0 deletionsqa/ganeti-qa.py
- qa/qa_rapi.py 3 additions, 3 deletionsqa/qa_rapi.py
- test/ganeti.rapi.client_unittest.py 228 additions, 35 deletionstest/ganeti.rapi.client_unittest.py
- tools/move-instance 8 additions, 7 deletionstools/move-instance
Loading
Please register or sign in to comment