Files
herolib/lib/vfs/ourdb_fs/factory.v
Mahmoud Emad 528d594056 feat: Improve OurDBFS file system persistence and ID generation
- Fixed ID generation for files and directories in OurDBFS,
  preventing collisions and improving data integrity.  This
  ensures that IDs are consistently and uniquely assigned.
- Updated save methods to correctly update the `metadata.id`
  field across all FSEntry types (File, Directory, Symlink).
  This change solves a previous issue where IDs weren't being
  properly persisted.
- Added incremental mode to OurDB, improving performance for
  large datasets.  This allows for more efficient updates
  instead of full overwrites.
2025-02-18 13:27:22 +00:00

46 lines
1.2 KiB
V

module ourdb_fs
import os
import freeflowuniverse.herolib.data.ourdb
// Factory method for creating a new OurDBFS instance
@[params]
pub struct VFSParams {
pub:
data_dir string // Directory to store OurDBFS data
metadata_dir string // Directory to store OurDBFS metadata
incremental_mode bool // Whether to enable incremental mode
}
// Factory method for creating a new OurDBFS instance
pub fn new(params VFSParams) !&OurDBFS {
if !os.exists(params.data_dir) {
os.mkdir(params.data_dir) or { return error('Failed to create data directory: ${err}') }
}
if !os.exists(params.metadata_dir) {
os.mkdir(params.metadata_dir) or {
return error('Failed to create metadata directory: ${err}')
}
}
mut db_meta := ourdb.new(
path: '${params.metadata_dir}/ourdb_fs.db_meta'
incremental_mode: params.incremental_mode
)!
mut db_data := ourdb.new(
path: '${params.data_dir}/vfs_metadata.db_meta'
incremental_mode: params.incremental_mode
)!
mut fs := &OurDBFS{
root_id: 1
block_size: 1024 * 4
data_dir: params.data_dir
metadata_dir: params.metadata_dir
db_meta: &db_meta
db_data: &db_data
}
return fs
}