1use common_base::secrets::ExposeSecret;
16use common_telemetry::info;
17use object_store::services::Oss;
18use object_store::{util, ObjectStore};
19use snafu::prelude::*;
20
21use crate::config::OssConfig;
22use crate::error::{self, Result};
23use crate::store::build_http_client;
24
25pub(crate) async fn new_oss_object_store(oss_config: &OssConfig) -> Result<ObjectStore> {
26 let root = util::normalize_dir(&oss_config.root);
27 info!(
28 "The oss storage bucket is: {}, root is: {}",
29 oss_config.bucket, &root
30 );
31
32 let client = build_http_client(&oss_config.http_client)?;
33
34 let builder = Oss::default()
35 .root(&root)
36 .bucket(&oss_config.bucket)
37 .endpoint(&oss_config.endpoint)
38 .access_key_id(oss_config.access_key_id.expose_secret())
39 .access_key_secret(oss_config.access_key_secret.expose_secret())
40 .http_client(client);
41
42 Ok(ObjectStore::new(builder)
43 .context(error::InitBackendSnafu)?
44 .finish())
45}