summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru DAMIAN <alexandru.damian@intel.com>2014-06-11 10:19:03 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-06-13 11:55:33 +0100
commit74cd8c38aa434ab825931f30b957d7b4bf871a9a (patch)
tree83eb7e68f84eaded742b6d2bc9073e095b62e139
parentc7ae6bd30751a3020077b395dba929846dd1e020 (diff)
downloadpoky-74cd8c38aa434ab825931f30b957d7b4bf871a9a.tar.gz
bitbake: xmlrpc: add support for token reusing
We add support to specify a connection token in the command line and in the environment variable BBTOKEN. When a client registers to a bitbake server, that client will have exclusive access to the server. The client is identified by a server-supplied token. If a client terminates, we cannot reconnect to the server as the token is lost. This patch adds the capability to specify the connection token in the command line for xmlrpc clients. This allows us to have bitbake work as an already-authenticated client with the server and resume sending commands to a server. (Bitbake rev: db5390940c0afbcdc9fbcf1225761968ae51d4a7) Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rwxr-xr-xbitbake/bin/bitbake8
-rw-r--r--bitbake/lib/bb/server/xmlrpc.py19
2 files changed, 19 insertions, 8 deletions
diff --git a/bitbake/bin/bitbake b/bitbake/bin/bitbake
index f120baccf0..b3acbe1bd2 100755
--- a/bitbake/bin/bitbake
+++ b/bitbake/bin/bitbake
@@ -169,6 +169,9 @@ class BitBakeConfigParameters(cookerdata.ConfigParameters):
169 parser.add_option("-t", "--servertype", help = "Choose which server to use, process or xmlrpc.", 169 parser.add_option("-t", "--servertype", help = "Choose which server to use, process or xmlrpc.",
170 action = "store", dest = "servertype") 170 action = "store", dest = "servertype")
171 171
172 parser.add_option("", "--token", help = "Specify the connection token to be used when connecting to a remote server.",
173 action = "store", dest = "xmlrpctoken")
174
172 parser.add_option("", "--revisions-changed", help = "Set the exit code depending on whether upstream floating revisions have changed or not.", 175 parser.add_option("", "--revisions-changed", help = "Set the exit code depending on whether upstream floating revisions have changed or not.",
173 action = "store_true", dest = "revisions_changed", default = False) 176 action = "store_true", dest = "revisions_changed", default = False)
174 177
@@ -200,6 +203,9 @@ class BitBakeConfigParameters(cookerdata.ConfigParameters):
200 options.servertype = "xmlrpc" 203 options.servertype = "xmlrpc"
201 options.remote_server = os.environ["BBSERVER"] 204 options.remote_server = os.environ["BBSERVER"]
202 205
206 if "BBTOKEN" in os.environ:
207 options.xmlrpctoken = os.environ["BBTOKEN"]
208
203 # if BBSERVER says to autodetect, let's do that 209 # if BBSERVER says to autodetect, let's do that
204 if options.remote_server: 210 if options.remote_server:
205 [host, port] = options.remote_server.split(":", 2) 211 [host, port] = options.remote_server.split(":", 2)
@@ -332,7 +338,7 @@ def main():
332 bb.event.ui_queue = [] 338 bb.event.ui_queue = []
333 else: 339 else:
334 # we start a stub server that is actually a XMLRPClient that connects to a real server 340 # we start a stub server that is actually a XMLRPClient that connects to a real server
335 server = servermodule.BitBakeXMLRPCClient(configParams.observe_only) 341 server = servermodule.BitBakeXMLRPCClient(configParams.observe_only, configParams.xmlrpctoken)
336 server.saveConnectionDetails(configParams.remote_server) 342 server.saveConnectionDetails(configParams.remote_server)
337 343
338 344
diff --git a/bitbake/lib/bb/server/xmlrpc.py b/bitbake/lib/bb/server/xmlrpc.py
index d6f4338ae5..4205a4c35f 100644
--- a/bitbake/lib/bb/server/xmlrpc.py
+++ b/bitbake/lib/bb/server/xmlrpc.py
@@ -281,13 +281,16 @@ class BitBakeXMLRPCServerConnection(BitBakeBaseServerConnection):
281 self.observer_only = observer_only 281 self.observer_only = observer_only
282 self.featureset = featureset 282 self.featureset = featureset
283 283
284 def connect(self): 284 def connect(self, token = None):
285 if not self.observer_only: 285 if token is None:
286 token = self.connection.addClient() 286 if self.observer_only:
287 else: 287 token = "observer"
288 token = "observer" 288 else:
289 token = self.connection.addClient()
290
289 if token is None: 291 if token is None:
290 return None 292 return None
293
291 self.transport.set_connection_token(token) 294 self.transport.set_connection_token(token)
292 295
293 self.events = uievent.BBUIEventQueue(self.connection, self.clientinfo) 296 self.events = uievent.BBUIEventQueue(self.connection, self.clientinfo)
@@ -336,7 +339,9 @@ class BitBakeServer(BitBakeBaseServer):
336 339
337class BitBakeXMLRPCClient(BitBakeBaseServer): 340class BitBakeXMLRPCClient(BitBakeBaseServer):
338 341
339 def __init__(self, observer_only = False): 342 def __init__(self, observer_only = False, token = None):
343 self.token = token
344
340 self.observer_only = observer_only 345 self.observer_only = observer_only
341 # if we need extra caches, just tell the server to load them all 346 # if we need extra caches, just tell the server to load them all
342 pass 347 pass
@@ -366,7 +371,7 @@ class BitBakeXMLRPCClient(BitBakeBaseServer):
366 try: 371 try:
367 self.serverImpl = XMLRPCProxyServer(host, port) 372 self.serverImpl = XMLRPCProxyServer(host, port)
368 self.connection = BitBakeXMLRPCServerConnection(self.serverImpl, (ip, 0), self.observer_only, featureset) 373 self.connection = BitBakeXMLRPCServerConnection(self.serverImpl, (ip, 0), self.observer_only, featureset)
369 return self.connection.connect() 374 return self.connection.connect(self.token)
370 except Exception as e: 375 except Exception as e:
371 bb.warn("Could not connect to server at %s:%s (%s)" % (host, port, str(e))) 376 bb.warn("Could not connect to server at %s:%s (%s)" % (host, port, str(e)))
372 raise e 377 raise e