From cfdf561dade73ad224d0e7272591b969af8ff458 Mon Sep 17 00:00:00 2001 From: Michael Hanselmann Date: Wed, 18 Apr 2012 23:15:38 +0200 Subject: [PATCH] Stop using locks in LUXI "QueryTags" Also mark it as deprecated in NEWS as normal queries can be used instead. Signed-off-by: Michael Hanselmann Reviewed-by: Iustin Pop --- NEWS | 6 +++--- lib/cmdlib.py | 15 +++++++++++++-- lib/opcodes.py | 2 ++ lib/server/masterd.py | 2 +- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index 8b90d0d..97bfcb9 100644 --- a/NEWS +++ b/NEWS @@ -16,9 +16,9 @@ Version 2.6.0 beta1 ``Query(what=QR_LOCK, ...)`` instead. - The LUXI requests :pyeval:`luxi.REQ_QUERY_JOBS`, :pyeval:`luxi.REQ_QUERY_INSTANCES`, :pyeval:`luxi.REQ_QUERY_NODES`, - :pyeval:`luxi.REQ_QUERY_GROUPS` and :pyeval:`luxi.REQ_QUERY_EXPORTS` - are deprecated and will be removed in a future version. - :pyeval:`luxi.REQ_QUERY` should be used instead. + :pyeval:`luxi.REQ_QUERY_GROUPS`, :pyeval:`luxi.REQ_QUERY_EXPORTS` and + :pyeval:`luxi.REQ_QUERY_TAGS` are deprecated and will be removed in a + future version. :pyeval:`luxi.REQ_QUERY` should be used instead. Version 2.5.0 diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 06b90f2..3fd50c1 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -14292,14 +14292,25 @@ class TagsLU(NoHooksLU): # pylint: disable=W0223 def ExpandNames(self): self.group_uuid = None self.needed_locks = {} + if self.op.kind == constants.TAG_NODE: self.op.name = _ExpandNodeName(self.cfg, self.op.name) - self.needed_locks[locking.LEVEL_NODE] = self.op.name + lock_level = locking.LEVEL_NODE + lock_name = self.op.name elif self.op.kind == constants.TAG_INSTANCE: self.op.name = _ExpandInstanceName(self.cfg, self.op.name) - self.needed_locks[locking.LEVEL_INSTANCE] = self.op.name + lock_level = locking.LEVEL_INSTANCE + lock_name = self.op.name elif self.op.kind == constants.TAG_NODEGROUP: self.group_uuid = self.cfg.LookupNodeGroup(self.op.name) + lock_level = locking.LEVEL_NODEGROUP + lock_name = self.group_uuid + else: + lock_level = None + lock_name = None + + if lock_level and getattr(self.op, "use_locking", True): + self.needed_locks[lock_level] = lock_name # FIXME: Acquire BGL for cluster tag operations (as of this writing it's # not possible to acquire the BGL based on opcode parameters) diff --git a/lib/opcodes.py b/lib/opcodes.py index 828497f..2464c93 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -1737,6 +1737,8 @@ class OpTagsGet(OpCode): OP_DSC_FIELD = "name" OP_PARAMS = [ _PTagKind, + # Not using _PUseLocking as the default is different for historical reasons + ("use_locking", True, ht.TBool, "Whether to use synchronization"), # Name is only meaningful for nodes and instances ("name", ht.NoDefault, ht.TMaybeString, None), ] diff --git a/lib/server/masterd.py b/lib/server/masterd.py index 4284e71..d799faa 100644 --- a/lib/server/masterd.py +++ b/lib/server/masterd.py @@ -393,7 +393,7 @@ class ClientOps: elif method == luxi.REQ_QUERY_TAGS: (kind, name) = args logging.info("Received tags query request") - op = opcodes.OpTagsGet(kind=kind, name=name) + op = opcodes.OpTagsGet(kind=kind, name=name, use_locking=False) return self._Query(op) elif method == luxi.REQ_QUEUE_SET_DRAIN_FLAG: -- 1.7.10.4