diff --git a/server/src/main.rs b/server/src/main.rs index 71282ce0..3d3f51d3 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -24,6 +24,7 @@ use std::fs::File; use std::io::{BufReader, Error, ErrorKind, Read, Write}; use std::rc::Rc; use std::str::FromStr; +use std::thread::{spawn, JoinHandle}; use std::time::Duration; use url::form_urlencoded; @@ -64,6 +65,7 @@ pub fn main() -> std::io::Result<()> { .long("file") .help("The file to load") .takes_value(true) + .multiple(true) .required(true), ), ) @@ -77,20 +79,29 @@ pub fn main() -> std::io::Result<()> { match matches.subcommand() { ("load", Some(submatches)) => { - let file = submatches.value_of("file").unwrap(); - let format = file - .rsplit_once(".") - .and_then(|(_, extension)| { - DatasetFormat::from_extension(extension) - .or_else(|| GraphFormat::from_extension(extension)?.try_into().ok()) + let handles = submatches.values_of("file").unwrap().into_iter().map(|file| { + let store = store.clone(); + let file = file.to_string(); + spawn(move || { + let format = file + .rsplit_once(".") + .and_then(|(_, extension)| { + DatasetFormat::from_extension(extension) + .or_else(|| GraphFormat::from_extension(extension)?.try_into().ok()) + }) + .ok_or_else(|| { + Error::new( + ErrorKind::InvalidInput, + "The server is not able to guess the file format of {} from its extension", + ) + })?; + store.bulk_load_dataset(BufReader::new(File::open(file)?), format, None)?; + Ok(()) }) - .ok_or_else(|| { - Error::new( - ErrorKind::InvalidInput, - "The server is not able to guess the file format of {} from its extension", - ) - })?; - store.bulk_load_dataset(BufReader::new(File::open(file)?), format, None)?; + }).collect::>>>(); + for handle in handles { + handle.join().unwrap()?; + } store.optimize() } ("serve", Some(submatches)) => {