diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 362aa15c8a4699efea1fac8f6fe58f15b8415c0c..cefd7d4a70e4e551ec32cb08ec2723c957dd2dc3 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -4338,7 +4338,7 @@ class _NodeQuery(_QueryBase): def ExpandNames(self, lu): lu.needed_locks = {} - lu.share_locks[locking.LEVEL_NODE] = 1 + lu.share_locks = _ShareAll() if self.names: self.wanted = _GetWantedNodes(lu, self.names) @@ -4349,7 +4349,7 @@ class _NodeQuery(_QueryBase): query.NQ_LIVE in self.requested_data) if self.do_locking: - # if we don't request only static fields, we need to lock the nodes + # If any non-static field is requested we need to lock the nodes lu.needed_locks[locking.LEVEL_NODE] = self.wanted def DeclareLocks(self, lu, level): @@ -4721,7 +4721,7 @@ class LUQuery(NoHooksLU): def CheckArguments(self): qcls = _GetQueryImplementation(self.op.what) - self.impl = qcls(self.op.filter, self.op.fields, False) + self.impl = qcls(self.op.filter, self.op.fields, self.op.use_locking) def ExpandNames(self): self.impl.ExpandNames(self) @@ -12057,6 +12057,9 @@ class LUGroupQuery(NoHooksLU): def ExpandNames(self): self.gq.ExpandNames(self) + def DeclareLocks(self, level): + self.gq.DeclareLocks(self, level) + def Exec(self, feedback_fn): return self.gq.OldStyleQuery(self) diff --git a/lib/opcodes.py b/lib/opcodes.py index a960d44aa9ed0fb96d716ecb7e925f83c87795f8..fe99b6ee0acb1194ce05ccd1eb38d3ec4238b65b 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -795,6 +795,7 @@ class OpQuery(OpCode): OP_DSC_FIELD = "what" OP_PARAMS = [ _PQueryWhat, + _PUseLocking, ("fields", ht.NoDefault, ht.TListOf(ht.TNonEmptyString), "Requested fields"), ("filter", None, ht.TOr(ht.TNone, ht.TListOf),