summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2013-08-24 12:03:10 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-08-26 11:29:46 +0100
commitbfab986ccd59636d0b0e79309f020e55481b0567 (patch)
tree5db43a018da4cb21c9687d4a4c7fc8d8245ad5e4
parenta03a423c607f53684789ebb5c3c5003568047a14 (diff)
downloadast2050-yocto-poky-bfab986ccd59636d0b0e79309f020e55481b0567.zip
ast2050-yocto-poky-bfab986ccd59636d0b0e79309f020e55481b0567.tar.gz
bitbake: server/xmlrpc/prserv: Add sane timeout to default xmlrpc server
The standard python socket connect has long timouts which make sense for remote connections but not local things like the PR Service. This adds a timeout parameter to the common xmlrpc server creation function and sets it to a more reasonable 5 seconds. Making the PR server instantly exit is a good way to test the effect of this on bitbake. We can remove the bodged timeout in the PRServer terminate function which has the side effect of affecting global scope. (Bitbake rev: 8c01cff94787abbb64fbdf0c16cd63f8f97a7e03) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/lib/bb/server/xmlrpc.py22
-rw-r--r--bitbake/lib/prserv/serv.py3
2 files changed, 18 insertions, 7 deletions
diff --git a/bitbake/lib/bb/server/xmlrpc.py b/bitbake/lib/bb/server/xmlrpc.py
index 026415e..d290550 100644
--- a/bitbake/lib/bb/server/xmlrpc.py
+++ b/bitbake/lib/bb/server/xmlrpc.py
@@ -47,15 +47,29 @@ except ImportError:
DEBUG = False
from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler
-import inspect, select
+import inspect, select, httplib
from . import BitBakeBaseServer, BitBakeBaseServerConnection, BaseImplServer
class BBTransport(xmlrpclib.Transport):
- def __init__(self):
+ def __init__(self, timeout):
+ self.timeout = timeout
self.connection_token = None
xmlrpclib.Transport.__init__(self)
+ # Modified from default to pass timeout to HTTPConnection
+ def make_connection(self, host):
+ #return an existing connection if possible. This allows
+ #HTTP/1.1 keep-alive.
+ if self._connection and host == self._connection[0]:
+ return self._connection[1]
+
+ # create a HTTP connection object from a host descriptor
+ chost, self._extra_headers, x509 = self.get_host_info(host)
+ #store the host argument along with the connection object
+ self._connection = host, httplib.HTTPConnection(chost, timeout=self.timeout)
+ return self._connection[1]
+
def set_connection_token(self, token):
self.connection_token = token
@@ -64,8 +78,8 @@ class BBTransport(xmlrpclib.Transport):
h.putheader("Bitbake-token", self.connection_token)
xmlrpclib.Transport.send_content(self, h, body)
-def _create_server(host, port):
- t = BBTransport()
+def _create_server(host, port, timeout = 5):
+ t = BBTransport(timeout)
s = xmlrpclib.Server("http://%s:%d/" % (host, port), transport=t, allow_none=True)
return s, t
diff --git a/bitbake/lib/prserv/serv.py b/bitbake/lib/prserv/serv.py
index b854686..81b4f8d 100644
--- a/bitbake/lib/prserv/serv.py
+++ b/bitbake/lib/prserv/serv.py
@@ -186,9 +186,6 @@ class PRServerConnection():
self.connection, self.transport = bb.server.xmlrpc._create_server(self.host, self.port)
def terminate(self):
- # Don't wait for server indefinitely
- import socket
- socket.setdefaulttimeout(2)
try:
logger.info("Terminating PRServer...")
self.connection.quit()
OpenPOWER on IntegriCloud