robotfs/engine/engine.go

63 lines
1.1 KiB
Go

package engine
import (
"fmt"
"robotfs/config"
"robotfs/pkg/meta/redis_lua"
"robotfs/pkg/storage"
)
type Engine struct {
FileSystemManager *FileSystemManager
}
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.FileSystemManager = NewFileSystemManager(
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.FileSystemManager.Shutdown()
}