Revision 38e4d732

b/src/Ganeti/Query/Query.hs
57 57

  
58 58
import Control.DeepSeq
59 59
import Control.Monad (filterM, foldM)
60
import Control.Monad.IO.Class
60 61
import Control.Monad.Trans (lift)
61 62
import qualified Data.Foldable as Foldable
62 63
import Data.List (intercalate)
......
285 286
          -> [FilterField]                -- ^ Item
286 287
          -> Filter FilterField           -- ^ Filter
287 288
          -> IO (ErrorResult QueryResult) -- ^ Result
288
queryJobs cfg live fields qfilter =
289
  runResultT $ do
289
queryJobs cfg live fields qfilter = runResultT $ do
290 290
  rootdir <- lift queueDir
291
  let wanted_names = getRequestedJobIDs qfilter
292
      want_arch = Query.Job.wantArchived fields
291
  wanted_names <- toErrorStr $ getRequestedJobIDs qfilter
293 292
  rjids <- case wanted_names of
294
             Bad msg -> toError . Bad $ GenericError msg
295
             Ok [] -> if live
296
                        -- we can check the filesystem for actual jobs
297
                        then do
298
                          maybeJobIDs <-
299
                            lift (determineJobDirectories rootdir want_arch
300
                              >>= getJobIDs)
301
                          case maybeJobIDs of
302
                            Bad e -> (toError . Bad) . BlockDeviceError $
303
                              "Unable to fetch the job list: " ++ show e
304
                            Ok jobIDs -> toError . Ok $ sortJobIDs jobIDs
305
                        -- else we shouldn't look at the filesystem...
306
                        else return []
307
             Ok v -> toError $ Ok v
293
       [] | live -> do -- we can check the filesystem for actual jobs
294
              let want_arch = Query.Job.wantArchived fields
295
              jobIDs <-
296
                withErrorT (BlockDeviceError .
297
                            (++) "Unable to fetch the job list: " . show) $
298
                  liftIO (determineJobDirectories rootdir want_arch)
299
                  >>= ResultT . getJobIDs
300
              return $ sortJobIDs jobIDs
301
              -- else we shouldn't look at the filesystem...
302
       v -> return v
308 303
  cfilter <- toError $ compileFilter Query.Job.fieldsMap qfilter
309 304
  let selected = getSelectedFields Query.Job.fieldsMap fields
310 305
      (fdefs, fgetters, _) = unzip3 selected

Also available in: Unified diff