Skip to main content

vfs/engine/
metadata.rs

1use crate::engine::error::VfsResult;
2use crate::engine::types::{
3    BlockKey, ChunkEdit, ChunkRange, ChunkRef, CreateInodeAttrs, DentryStat, InodeMeta, InodePatch,
4    SnapshotId,
5};
6use async_trait::async_trait;
7
8#[async_trait]
9pub trait MetadataStore: Send + Sync {
10    async fn resolve(&self, path: &str) -> VfsResult<InodeMeta>;
11    async fn resolve_parent(&self, path: &str) -> VfsResult<(InodeMeta, String)>;
12    async fn lstat(&self, path: &str) -> VfsResult<InodeMeta>;
13    async fn list_dir(&self, ino: u64) -> VfsResult<Vec<DentryStat>>;
14
15    async fn create(
16        &self,
17        parent: u64,
18        name: &str,
19        attrs: CreateInodeAttrs,
20    ) -> VfsResult<InodeMeta>;
21    async fn link(&self, parent: u64, name: &str, target: u64) -> VfsResult<()>;
22    async fn remove(&self, parent: u64, name: &str) -> VfsResult<Vec<BlockKey>>;
23    async fn rename(
24        &self,
25        src_parent: u64,
26        src: &str,
27        dst_parent: u64,
28        dst: &str,
29    ) -> VfsResult<Vec<BlockKey>>;
30    async fn set_attr(&self, ino: u64, patch: InodePatch) -> VfsResult<Vec<BlockKey>>;
31    async fn commit_write(
32        &self,
33        ino: u64,
34        edits: Vec<ChunkEdit>,
35        new_size: u64,
36        allocated_extents: Vec<(u64, u64)>,
37    ) -> VfsResult<Vec<BlockKey>>;
38
39    async fn get_chunks(&self, ino: u64, range: ChunkRange) -> VfsResult<Vec<ChunkRef>>;
40
41    async fn snapshot(&self, root: u64) -> VfsResult<SnapshotId>;
42    async fn fork(&self, snap: SnapshotId) -> VfsResult<u64>;
43    async fn gc(&self) -> VfsResult<Vec<BlockKey>>;
44
45    async fn flush(&self) -> VfsResult<()> {
46        Ok(())
47    }
48}