1use std::{fs, path};
16
17use common_telemetry::info;
18use mito2::access_layer::{ATOMIC_WRITE_DIR, OLD_ATOMIC_WRITE_DIR};
19use object_store::services::Fs;
20use object_store::util::join_dir;
21use object_store::ObjectStore;
22use snafu::prelude::*;
23
24use crate::config::FileConfig;
25use crate::error::{self, Result};
26use crate::store;
27
28pub async fn new_fs_object_store(
30 data_home: &str,
31 _file_config: &FileConfig,
32) -> Result<ObjectStore> {
33 fs::create_dir_all(path::Path::new(&data_home))
34 .context(error::CreateDirSnafu { dir: data_home })?;
35 info!("The file storage home is: {}", data_home);
36
37 let atomic_write_dir = join_dir(data_home, ATOMIC_WRITE_DIR);
38 store::clean_temp_dir(&atomic_write_dir)?;
39
40 let old_atomic_temp_dir = join_dir(data_home, OLD_ATOMIC_WRITE_DIR);
42 store::clean_temp_dir(&old_atomic_temp_dir)?;
43
44 let builder = Fs::default()
45 .root(data_home)
46 .atomic_write_dir(&atomic_write_dir);
47
48 let object_store = ObjectStore::new(builder)
49 .context(error::InitBackendSnafu)?
50 .finish();
51
52 Ok(object_store)
53}