risingwave_object_store/object/opendal_engine/
fs.rs1use std::sync::Arc;
16
17use opendal::Operator;
18use opendal::layers::LoggingLayer;
19use opendal::services::Fs;
20use risingwave_common::config::ObjectStoreConfig;
21
22use super::{MediaType, OpendalObjectStore, new_operator};
23use crate::object::ObjectResult;
24use crate::object::object_metrics::ObjectStoreMetrics;
25use crate::object::opendal_engine::ATOMIC_WRITE_DIR;
26
27impl OpendalObjectStore {
28 pub fn new_fs_engine(
30 root: String,
31 config: Arc<ObjectStoreConfig>,
32 metrics: Arc<ObjectStoreMetrics>,
33 ) -> ObjectResult<Self> {
34 let mut builder = Fs::default().root(&root);
36 if config.set_atomic_write_dir {
37 let atomic_write_dir = format!("{}/{}", root, ATOMIC_WRITE_DIR);
38 builder = builder.atomic_write_dir(&atomic_write_dir);
39 }
40
41 let op = new_operator(
42 &config,
43 Operator::new(builder)?.layer(LoggingLayer::default()),
44 );
45
46 Ok(Self {
47 op,
48 media_type: MediaType::Fs,
49 config,
50 metrics,
51 })
52 }
53}