gotidb/pkg/engine/factory.go

68 lines
1.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package engine
import (
"fmt"
)
// NewEngine 创建指定类型的存储引擎
func NewEngine(config EngineConfig) (eng Engine, err error) {
if config == nil {
return nil, fmt.Errorf("engine config cannot be nil")
}
engineType := ""
defer func() {
if r := recover(); r != nil {
// 如果 Type() 方法调用导致 panic返回错误
fmt.Printf("Recovered from panic in NewEngine: %v\n", r)
// return nil,r
eng = nil
err = fmt.Errorf("engine type %s not supported", engineType)
}
}()
// 尝试获取引擎类型,如果失败则返回错误
engineType = config.Type()
switch engineType {
case "memory":
// 检查配置类型是否正确
memConfig, ok := config.(*MemoryEngineConfig)
if !ok {
return nil, fmt.Errorf("invalid config type for memory engine: %T", config)
}
return newMemoryEngine(memConfig)
case "bolt":
// 检查配置类型是否正确
boltConfig, ok := config.(*BoltEngineConfig)
if !ok {
return nil, fmt.Errorf("invalid config type for bolt engine: %T", config)
}
return newBoltEngine(boltConfig)
default:
return nil, fmt.Errorf("unsupported engine type")
}
}
// newMemoryEngine 创建内存引擎
// 这个函数将在memory包中实现这里只是声明
var newMemoryEngine = func(config *MemoryEngineConfig) (Engine, error) {
return nil, fmt.Errorf("memory engine not implemented")
}
// newBoltEngine 创建Bolt引擎
// 这个函数将在bolt包中实现这里只是声明
var newBoltEngine = func(config *BoltEngineConfig) (Engine, error) {
return nil, fmt.Errorf("bolt engine not implemented")
}
// RegisterMemoryEngine 注册内存引擎创建函数
func RegisterMemoryEngine(creator func(config *MemoryEngineConfig) (Engine, error)) {
newMemoryEngine = creator
}
// RegisterBoltEngine 注册Bolt引擎创建函数
func RegisterBoltEngine(creator func(config *BoltEngineConfig) (Engine, error)) {
newBoltEngine = creator
}