package engine import ( "fmt" "robotfs/config" "robotfs/pkg/fs" "robotfs/pkg/meta/redis_lua" "robotfs/pkg/storage" ) type Engine struct { FileSystem *fs.FileSystem } func NewEngine() *Engine { return &Engine{} } func (e *Engine) Start() error { cfg := config.GetConfig() meta, err := e.initMetaStore(cfg) if err != nil { return err } store, err := e.initStorage(cfg) if err != nil { return err } e.FileSystem = fs.NewFileSystem( meta, store, cfg.GetString("robotfs.data_path"), ) return nil } func (e *Engine) initMetaStore(cfg config.Configuration) (*redis_lua.RedisLuaStore, error) { meta := redis_lua.NewRedisLuaStore() if err := meta.Initialize(cfg, "redis."); err != nil { return nil, fmt.Errorf("initialize meta store failed: %v", err) } return meta, nil } func (e *Engine) initStorage(cfg config.Configuration) (*storage.Storage, error) { store := storage.NewStorage() if err := store.Initialize(cfg, "s3."); err != nil { return nil, fmt.Errorf("initialize s3 config failed: %v", err) } return store, nil } func (e *Engine) Stop() { // Stop filesystem manager. e.FileSystem.Shutdown() }