64 lines
1.1 KiB
Go
64 lines
1.1 KiB
Go
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()
|
|
}
|