On Tue, Aug 04, 2015 at 06:10:57PM +0200, 'Klaus Aehlig' via ganeti-devel wrote:
While it is not very useful, our specification still says
that we should return the values for fields requested multiple
times also multiple times. Commit 237a43b added fetching of
fields not requested but needed to evaluate the filter; to
avoid overhead the list of fields was deduplicated, thereby
breaking the said property. Restore it by only deduplicating
and filtering the additional fields.

Signed-off-by: Klaus Aehlig <[email protected]>
---
src/Ganeti/Query/Query.hs | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/Ganeti/Query/Query.hs b/src/Ganeti/Query/Query.hs
index 4d8fc83..1d6f8fb 100644
--- a/src/Ganeti/Query/Query.hs
+++ b/src/Ganeti/Query/Query.hs
@@ -218,8 +218,9 @@ genericQuery fieldsMap collector nameFn configFn getFn cfg
             live fields qfilter wanted =
  runResultT $ do
  cfilter <- toError $ compileFilter fieldsMap qfilter
-  let allfields = ordNub $ fields ++ filterArguments qfilter
-      count = length $ ordNub fields
+  let allfields = (++) fields . filter (not . (`elem` fields))
+                  . ordNub $ filterArguments qfilter
+      count = length fields
      selected = getSelectedFields fieldsMap allfields
      (fdefs, fgetters, _) = unzip3 selected
      live' = live && needsLiveData fgetters
--
2.5.0.rc2.392.g76e840b


LGTM, thanks

Reply via email to