Merge branch 'stable-2.12' into stable-2.13
authorPetr Pudlak <pudlak@google.com>
Fri, 7 Aug 2015 16:49:51 +0000 (18:49 +0200)
committerPetr Pudlak <pudlak@google.com>
Fri, 7 Aug 2015 17:13:16 +0000 (19:13 +0200)
* stable-2.12
  Accept allocation of 0 jobs
  Return multiple fields multiple times
  In queries collect all needed data
  Add a function computing the filter arguments
  Utils: Add ordNub
  Accept timeout errors are luxi down

Conflicts:
      src/Ganeti/Query/Query.hs - use the 2.12 version, just renaming
        evaluateFilter to evaluateQueryFilter
      src/Ganeti/Utils.hs - keep 2.13 version (from which ordBy has been
        cherry picked)

Signed-off-by: Petr Pudlak <pudlak@google.com>
Reviewed-by: Klaus Aehlig <aehlig@google.com>

1  2 
lib/watcher/__init__.py
src/Ganeti/JQueue.hs
src/Ganeti/Query/Language.hs
src/Ganeti/Query/Query.hs

Simple merge
Simple merge
@@@ -192,8 -190,14 +193,14 @@@ data Filter 
      | GEFilter       a FilterValue  -- ^ @>=@ /field/ /value/
      | RegexpFilter   a FilterRegex  -- ^ @=~@ /field/ /regexp/
      | ContainsFilter a FilterValue  -- ^ @=[]@ /list-field/ /value/
 -      deriving (Show, Eq)
 +      deriving (Show, Eq, Ord, Functor, Foldable, Traversable)
  
+ -- | Get the \"things\" a filter talks about. This is useful, e.g.,
+ -- to decide which additional fields to fetch in a query depending
+ -- on live data.
+ filterArguments :: Filter a -> [a]
+ filterArguments = toList
  -- | Serialiser for the 'Filter' data type.
  showFilter :: (JSON a) => Filter a -> JSValue
  showFilter (EmptyFilter)          = JSNull
@@@ -234,9 -236,9 +237,9 @@@ genericQuery fieldsMap collector nameF
    -- based on the gathered data
    runtimes <- (case collector of
      CollectorSimple     collFn -> lift $ collFn live' cfg fobjects
-     CollectorFieldAware collFn -> lift $ collFn live' cfg fields fobjects) >>=
-     (toError . filterM (\(obj, runtime) ->
+     CollectorFieldAware collFn -> lift $ collFn live' cfg allfields fobjects)
+     >>= (toError . filterM (\(obj, runtime) ->
 -      evaluateFilter cfg (Just runtime) obj cfilter))
 +      evaluateQueryFilter cfg (Just runtime) obj cfilter))
    let fdata = map (\(obj, runtime) ->
                       map (execGetter cfg runtime obj) fgetters)
                runtimes