From a5485ffc5a802f8229429ff865d5043a5d846e4d Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Wed, 21 Mar 2012 16:59:17 +0100 Subject: [PATCH] LUClusterVerifyConfig: Share BGL, acquire all locks in shared mode Instead of acquiring the BGL in exclusive mode (which blocks all other operations), we acquire all locks for groups, nodes and instances in shared mode before verifying the configuration. Signed-off-by: Michael Hanselmann <hansmi@google.com> Reviewed-by: Bernardo Dal Seno <bdalseno@google.com> --- lib/cmdlib.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/cmdlib.py b/lib/cmdlib.py index b432794de..005d493fa 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -1555,7 +1555,7 @@ class LUClusterVerifyConfig(NoHooksLU, _VerifyErrors): """Verifies the cluster config. """ - REQ_BGL = True + REQ_BGL = False def _VerifyHVP(self, hvp_data): """Verifies locally the syntax of the hypervisor parameters. @@ -1572,13 +1572,17 @@ class LUClusterVerifyConfig(NoHooksLU, _VerifyErrors): self._ErrorIf(True, self.ECLUSTERCFG, None, msg % str(err)) def ExpandNames(self): - # Information can be safely retrieved as the BGL is acquired in exclusive - # mode - assert locking.BGL in self.owned_locks(locking.LEVEL_CLUSTER) + self.needed_locks = dict.fromkeys(locking.LEVELS, locking.ALL_SET) + self.share_locks = _ShareAll() + + def CheckPrereq(self): + """Check prerequisites. + + """ + # Retrieve all information self.all_group_info = self.cfg.GetAllNodeGroupsInfo() self.all_node_info = self.cfg.GetAllNodesInfo() self.all_inst_info = self.cfg.GetAllInstancesInfo() - self.needed_locks = {} def Exec(self, feedback_fn): """Verify integrity of cluster, performing various test on nodes. -- GitLab