Revision f59cefcb src/Ganeti/Query/Query.hs
b/src/Ganeti/Query/Query.hs | ||
---|---|---|
193 | 193 |
genericQuery fieldsMap collector nameFn configFn getFn cfg |
194 | 194 |
live fields qfilter wanted = |
195 | 195 |
runResultT $ do |
196 |
cfilter <- resultT $ compileFilter fieldsMap qfilter
|
|
196 |
cfilter <- toError $ compileFilter fieldsMap qfilter
|
|
197 | 197 |
let selected = getSelectedFields fieldsMap fields |
198 | 198 |
(fdefs, fgetters, _) = unzip3 selected |
199 | 199 |
live' = live && needsLiveData fgetters |
200 |
objects <- resultT $ case wanted of
|
|
200 |
objects <- toError $ case wanted of
|
|
201 | 201 |
[] -> Ok . niceSortKey nameFn . |
202 | 202 |
Map.elems . fromContainer $ configFn cfg |
203 | 203 |
_ -> mapM (getFn cfg) wanted |
204 | 204 |
-- Run the first pass of the filter, without a runtime context; this will |
205 | 205 |
-- limit the objects that we'll contact for exports |
206 |
fobjects <- resultT $ filterM (\n -> evaluateFilter cfg Nothing n cfilter)
|
|
206 |
fobjects <- toError $ filterM (\n -> evaluateFilter cfg Nothing n cfilter)
|
|
207 | 207 |
objects |
208 | 208 |
-- Gather the runtime data |
209 | 209 |
runtimes <- case collector of |
... | ... | |
291 | 291 |
let wanted_names = getRequestedJobIDs qfilter |
292 | 292 |
want_arch = Query.Job.wantArchived fields |
293 | 293 |
rjids <- case wanted_names of |
294 |
Bad msg -> resultT . Bad $ GenericError msg
|
|
294 |
Bad msg -> toError . Bad $ GenericError msg
|
|
295 | 295 |
Ok [] -> if live |
296 | 296 |
-- we can check the filesystem for actual jobs |
297 | 297 |
then do |
... | ... | |
299 | 299 |
lift (determineJobDirectories rootdir want_arch |
300 | 300 |
>>= getJobIDs) |
301 | 301 |
case maybeJobIDs of |
302 |
Left e -> (resultT . Bad) . BlockDeviceError $
|
|
302 |
Left e -> (toError . Bad) . BlockDeviceError $
|
|
303 | 303 |
"Unable to fetch the job list: " ++ show e |
304 |
Right jobIDs -> resultT . Ok $ sortJobIDs jobIDs
|
|
304 |
Right jobIDs -> toError . Ok $ sortJobIDs jobIDs
|
|
305 | 305 |
-- else we shouldn't look at the filesystem... |
306 | 306 |
else return [] |
307 |
Ok v -> resultT $ Ok v
|
|
308 |
cfilter <- resultT $ compileFilter Query.Job.fieldsMap qfilter
|
|
307 |
Ok v -> toError $ Ok v
|
|
308 |
cfilter <- toError $ compileFilter Query.Job.fieldsMap qfilter
|
|
309 | 309 |
let selected = getSelectedFields Query.Job.fieldsMap fields |
310 | 310 |
(fdefs, fgetters, _) = unzip3 selected |
311 | 311 |
(_, filtergetters, _) = unzip3 . getSelectedFields Query.Job.fieldsMap |
... | ... | |
314 | 314 |
disabled_data = Bad "live data disabled" |
315 | 315 |
-- runs first pass of the filter, without a runtime context; this |
316 | 316 |
-- will limit the jobs that we'll load from disk |
317 |
jids <- resultT $
|
|
317 |
jids <- toError $
|
|
318 | 318 |
filterM (\jid -> evaluateFilter cfg Nothing jid cfilter) rjids |
319 | 319 |
-- here we run the runtime data gathering, filtering and evaluation, |
320 | 320 |
-- all in the same step, so that we don't keep jobs in memory longer |
... | ... | |
327 | 327 |
job <- lift $ if live' |
328 | 328 |
then loadJobFromDisk qdir True jid |
329 | 329 |
else return disabled_data |
330 |
pass <- resultT $ evaluateFilter cfg (Just job) jid cfilter
|
|
330 |
pass <- toError $ evaluateFilter cfg (Just job) jid cfilter
|
|
331 | 331 |
let nlst = if pass |
332 | 332 |
then let row = map (execGetter cfg job jid) fgetters |
333 | 333 |
in rnf row `seq` row:lst |
Also available in: Unified diff