reguire gnupg1 on f>=31; sense the system to use gpg1 when installed
[nodemanager.git] / curlwrapper.py
index 8ab597f..a877b07 100644 (file)
@@ -1,30 +1,41 @@
-# $Id$
-# $URL$
+# Note
+# in spring 2010, an attempt was made to use pycurl instead of forking curl
+# it turned out, however, that after around 10 cycles of the nodemanager,
+# attempts to call GetSlivers were failing with a curl error 60
+# we are thus reverting to the version from tag curlwrapper.py-NodeManager-2.0-8
+# the (broken) pycurl version can be found in tags 2.0-9 and 2.0-10
 
 from subprocess import PIPE, Popen
 from select import select
-# raise xmplrpclib.ProtocolError
-import xmlrpclib
+import xmlrpc.client
 import signal
 import os
+
 import logger
 
+verbose=False
+#verbose=True
+
 class Sopen(Popen):
     def kill(self, signal = signal.SIGTERM):
         os.kill(self.pid, signal)
 
 def retrieve(url, cacert=None, postdata=None, timeout=90):
-#    options = ('/usr/bin/curl', '--fail', '--silent')
-    options = ('/usr/bin/curl', '--fail', )
-    if cacert: options += ('--cacert', cacert)
-    if postdata: options += ('--data', '@-')
+#    command = ('/usr/bin/curl', '--fail', '--silent')
+    command = ('/usr/bin/curl', '--fail', )
+    if cacert: command += ('--cacert', cacert)
+    if postdata: command += ('--data', '@-')
     if timeout: 
-        options += ('--max-time', str(timeout))
-        options += ('--connect-timeout', str(timeout))
-    p = Sopen(options + (url,), stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
+        command += ('--max-time', str(timeout))
+        command += ('--connect-timeout', str(timeout))
+    command += (url, )
+    if verbose:
+        print('Invoking ', command)
+        if postdata: print('with postdata=', postdata)
+    p = Sopen(command , stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
     if postdata: p.stdin.write(postdata)
     p.stdin.close()
-    sout, sin, serr = select([p.stdout,p.stderr],[],[], timeout)
+    sout, sin, serr = select([p.stdout, p.stderr], [], [], timeout)
     if len(sout) == 0 and len(sin) == 0 and len(serr) == 0: 
         logger.verbose("curlwrapper: timed out after %s" % timeout)
         p.kill(signal.SIGKILL) 
@@ -33,7 +44,7 @@ def retrieve(url, cacert=None, postdata=None, timeout=90):
     rc = p.wait()
     if rc != 0: 
         # when this triggers, the error sometimes doesn't get printed
-        logger.log ("in curlwrapper.retrieve, got stderr <%s>"%err)
-        raise xmlrpclib.ProtocolError(url, rc, err, postdata)
+        logger.log ("curlwrapper: retrieve, got stderr <%s>"%err)
+        raise xmlrpc.client.ProtocolError(url, rc, err, postdata)
     else: 
         return data