{"record":{"id":"619dd905bb0ba194","repo":"a-b-street/abstreet","slug":"errors","errorCode":null,"errorMessage":"{} errors: {}","messagePattern":"(.+?) errors: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"map_gui/src/tools/updater.rs","lineNumber":146,"sourceCode":"                // TODO Instead of holding everything in memory like this, we could also try to\n                // stream the gunzipping and output writing\n                info!(\"Decompressing {}\", path);\n                fs_err::create_dir_all(std::path::Path::new(&local_path).parent().unwrap())\n                    .unwrap();\n                let mut out = File::create(&local_path).unwrap();\n                let mut decoder = flate2::read::GzDecoder::new(&bytes[..]);\n                std::io::copy(&mut decoder, &mut out).map_err(|err| err.into())\n            }) {\n            Ok(_) => {}\n            Err(err) => {\n                let msg = format!(\"Problem with {}: {}\", url, err);\n                error!(\"{}\", msg);\n                messages.push(msg);\n            }\n        }\n    }\n    if !messages.is_empty() {\n        bail!(\"{} errors: {}\", messages.len(), messages.join(\", \"));\n    }\n    Ok(())\n}\n","sourceCodeStart":128,"sourceCodeEnd":150,"githubUrl":"https://github.com/a-b-street/abstreet/blob/0964f29315820c91b171b585eb51e300164e9197/map_gui/src/tools/updater.rs#L128-L150","documentation":"download_files in the data updater accumulates an error message for every file that fails to download; if any messages accumulated, it bails aggregating the count and all individual messages. It's a batch-failure report, so one bail can represent many underlying failures.","triggerScenarios":"Running prompt_to_download_missing_data when one or more remote data files fail: 404/403 on the host, network outage, DNS failure, or insufficient disk space during save.","commonSituations":"Offline or firewalled environments; upstream hosting changes URL or removes old data files; proxy blocks large downloads; partial mirror sync.","solutions":["Read the per-file messages in the error to see which URLs failed and why.","Check network connectivity / proxy settings and retry the download prompt.","If a URL is permanently dead, manually fetch the file into the expected data/ path or update the remote source list.","Re-run the updater after fixing — it resumes with the still-missing files only."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"match download_files(&paths, timer) {\n    Ok(()) => {},\n    Err(e) => {\n        eprintln!(\"Some downloads failed:\\n{e}\");\n        // inspect per-file messages, fix connectivity, then retry\n        eprintln!(\"Fix network/proxy and re-run the updater; it retries only missing files.\");\n    }\n}","preventionTips":["Check connectivity/proxy before starting large downloads","Run the updater on a stable connection; it resumes with only missing files","Monitor upstream data hosts for URL changes","Ensure enough free disk space before downloading"],"tags":["network","download","updater","batch"],"backgroundTag":"http-request-failed","analyzedSha":"0964f29315820c91b171b585eb51e300164e9197","analyzedAt":"2026-09-13T18:02:03.421Z","contentChangedAt":"2026-09-13T18:02:03.421Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}