in core/src/services/hdfs/backend.rs [110:148]
fn build(&mut self) -> Result<Self::Accessor> {
debug!("backend build started: {:?}", &self);
let name_node = match &self.name_node {
Some(v) => v,
None => {
return Err(Error::new(ErrorKind::ConfigInvalid, "name node is empty")
.with_context("service", Scheme::Hdfs))
}
};
let root = normalize_root(&self.root.take().unwrap_or_default());
debug!("backend use root {}", root);
let mut builder = hdrs::ClientBuilder::new(name_node);
if let Some(ticket_cache_path) = &self.kerberos_ticket_cache_path {
builder = builder.with_kerberos_ticket_cache_path(ticket_cache_path.as_str());
}
if let Some(user) = &self.user {
builder = builder.with_user(user.as_str());
}
let client = builder.connect().map_err(parse_io_error)?;
// Create root dir if not exist.
if let Err(e) = client.metadata(&root) {
if e.kind() == io::ErrorKind::NotFound {
debug!("root {} is not exist, creating now", root);
client.create_dir(&root).map_err(parse_io_error)?
}
}
debug!("backend build finished: {:?}", &self);
Ok(HdfsBackend {
root,
client: Arc::new(client),
})
}