collectLiveData True cfg fields nodes = do
  let hvs = [getDefaultHypervisorSpec cfg |
             queryDomainRequired hypervisorFields fields]
      good_nodes = nodesWithValidConfig cfg nodes
      storage_units n = if queryDomainRequired storageFields fields
                        then getStorageUnitsOfNode cfg n
                        else []
  rpcres <- executeRpcCalls
      [(n, RpcCallNodeInfo (storage_units n) hvs) | n <- good_nodes]
  return $ fillUpList (fillPairFromMaybe rpcResultNodeBroken pickPairUnique)
      nodes rpcres
collectLiveData True cfg fields nodes = do
  let hvs = [getDefaultHypervisorSpec cfg |
             queryDomainRequired hypervisorFields fields]
      good_nodes = nodesWithValidConfig cfg nodes
      storage_units n = if queryDomainRequired storageFields fields
                        then getStorageUnitsOfNode cfg n
                        else []
  rpcres <- executeRpcCalls
      [(n, RpcCallNodeInfo (storage_units n) hvs) | n <- good_nodes]
  return $ fillUpList (fillPairFromMaybe rpcResultNodeBroken pickPairUnique)
      nodes rpcres
collectLiveData True cfg fields nodes = do
  let hvs = [getDefaultHypervisorSpec cfg |
             queryDomainRequired hypervisorFields fields]
      good_nodes = nodesWithValidConfig cfg nodes
      storage_units n = if queryDomainRequired storageFields fields
                        then getStorageUnitsOfNode cfg n
                        else []
  rpcres <- executeRpcCalls
      [(n, RpcCallNodeInfo (storage_units n) hvs) | n <- good_nodes]
  return $ fillUpList (fillPairFromMaybe rpcResultNodeBroken pickPairUnique)
      nodes rpcres