From c1391810f1fd8798c4eb7245cfdc33dafde93f56 Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Fri, 11 Mar 2011 14:26:06 +0100
Subject: [PATCH] masterd: Simplify code for field queries
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Instead of going via cmdlib and using special cases for different
resources, the list of fields is used directly.

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: RenΓ© Nussbaumer <rn@google.com>
---
 lib/cmdlib.py         | 11 +----------
 lib/server/masterd.py | 13 ++++---------
 2 files changed, 5 insertions(+), 19 deletions(-)

diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 8949c5494..884c957f0 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -496,15 +496,6 @@ class _QueryBase:
     # Return expanded names
     return self.wanted
 
-  @classmethod
-  def FieldsQuery(cls, fields):
-    """Returns list of available fields.
-
-    @return: List of L{objects.QueryFieldDefinition}
-
-    """
-    return query.QueryFields(cls.FIELDS, fields)
-
   def ExpandNames(self, lu):
     """Expand names for this query.
 
@@ -4044,7 +4035,7 @@ class LUQueryFields(NoHooksLU):
     self.needed_locks = {}
 
   def Exec(self, feedback_fn):
-    return self.qcls.FieldsQuery(self.op.fields)
+    return query.QueryFields(self.qcls.FIELDS, self.op.fields)
 
 
 class LUNodeModifyStorage(NoHooksLU):
diff --git a/lib/server/masterd.py b/lib/server/masterd.py
index 89d6b3cad..bbe2658b9 100644
--- a/lib/server/masterd.py
+++ b/lib/server/masterd.py
@@ -250,18 +250,13 @@ class ClientOps:
     elif method == luxi.REQ_QUERY_FIELDS:
       req = objects.QueryFieldsRequest.FromDict(args)
 
-      if req.what in constants.QR_VIA_OP:
-        result = self._Query(opcodes.OpQueryFields(what=req.what,
-                                                   fields=req.fields))
-      elif req.what == constants.QR_LOCK:
-        return query.QueryFields(query.LOCK_FIELDS, req.fields)
-      elif req.what in constants.QR_VIA_LUXI:
-        raise NotImplementedError
-      else:
+      try:
+        fielddefs = query.ALL_FIELDS[req.what]
+      except KeyError:
         raise errors.OpPrereqError("Resource type '%s' unknown" % req.what,
                                    errors.ECODE_INVAL)
 
-      return result
+      return query.QueryFields(fielddefs, req.fields)
 
     elif method == luxi.REQ_QUERY_JOBS:
       (job_ids, fields) = args
-- 
GitLab