|
18 | 18 | #' @export |
19 | 19 | load_responses_all <- function(params, contingency_run = FALSE) { |
20 | 20 | msg_plain(paste0("Loading ", length(params$input), " CSVs")) |
21 | | - |
22 | | - map_fn <- if (params$parallel) { mclapply } else { lapply } |
| 21 | + |
| 22 | + # To prevent errors from one file from "contaminating" output for other files |
| 23 | + # that happen to be in the same `mclapply` group, turn `mc.preschedule` off. |
| 24 | + # This makes debugging problematic input files easier. |
| 25 | + # See https://stackoverflow.com/questions/18330274/an-error-in-one-job-contaminates-others-with-mclapply |
| 26 | + # for details. |
| 27 | + mclapply_no_preschedule <- function(...) { |
| 28 | + mclapply(..., mc.preschedule = FALSE) |
| 29 | + } |
| 30 | + |
| 31 | + map_fn <- if (params$parallel) { mclapply_no_preschedule } else { lapply } |
23 | 32 | input_data <- map_fn(seq_along(params$input), function(i) { |
24 | 33 | load_response_one(params$input[i], params, contingency_run) |
25 | 34 | }) |
26 | 35 |
|
27 | 36 | msg_plain(paste0("Finished loading CSVs")) |
| 37 | + |
| 38 | + which_errors <- unlist(lapply(input_data, inherits, "try-error")) |
| 39 | + if (any( which_errors )) { |
| 40 | + errored_filenames <- paste(params$input[which_errors], collapse=", ") |
| 41 | + stop(paste("ingestion and field creation failed for input data file(s)", errored_filenames)) |
| 42 | + } |
| 43 | + |
28 | 44 | input_data <- bind_rows(input_data) |
29 | 45 | msg_plain(paste0("Finished combining CSVs")) |
30 | 46 | return(input_data) |
|
0 commit comments