From 8659b73ede8c50addb8c665911ffe049459c8665 Mon Sep 17 00:00:00 2001 From: Guido Trotter <ultrotter@google.com> Date: Tue, 22 Jul 2008 14:25:08 +0000 Subject: [PATCH] Convert LUConnectConsole to concurrency For ConnectConsole we just need to lock the instance we're connecting to. We make a few rpcs to its primary node, but node daemons can now handle multiple queries and nodes cannot be removed till they have instances on them anyway. Note that since we return the ssh command, and that's executed outside of the ganeti daemon, without any locks held, the instance can then be subject to operations while we're connected to it, but that was the previous behavior as well. Reviewed-by: iustinp --- lib/cmdlib.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 2fecf3241..ca7ff6816 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -3354,6 +3354,10 @@ class LUConnectConsole(NoHooksLU): """ _OP_REQP = ["instance_name"] + REQ_BGL = False + + def ExpandNames(self): + self._ExpandAndLockInstance() def CheckPrereq(self): """Check prerequisites. @@ -3361,12 +3365,9 @@ class LUConnectConsole(NoHooksLU): This checks that the instance is in the cluster. """ - instance = self.cfg.GetInstanceInfo( - self.cfg.ExpandInstanceName(self.op.instance_name)) - if instance is None: - raise errors.OpPrereqError("Instance '%s' not known" % - self.op.instance_name) - self.instance = instance + self.instance = self.cfg.GetInstanceInfo(self.op.instance_name) + assert self.instance is not None, \ + "Cannot retrieve locked instance %s" % self.op.instance_name def Exec(self, feedback_fn): """Connect to the console of an instance -- GitLab