storage manager 添加open方法

This commit is contained in:
kingecg 2025-06-08 10:48:59 +08:00
parent dfa34016e5
commit 76b132a8b7
1 changed files with 35 additions and 0 deletions

View File

@ -2,6 +2,8 @@ package storage
import (
"fmt"
"io/ioutil"
"os"
"sync"
)
@ -72,6 +74,39 @@ func (sm *StorageManager) GetStorage(dbName string) (*LevelDBStorage, error) {
return sm.db[dbName], nil
}
func (sm *StorageManager) isLevelDB(dirp string) bool {
if _, err := os.Stat(dirp); os.IsNotExist(err) {
return false
}
files := []string{"CURRENT", "LOCK", "LOG", "LOG.old", "MANIFEST-"}
for _, file := range files {
if _, err := os.Stat(dirp + "/" + file); err == nil {
return true
}
}
return false
}
func (sm *StorageManager) Open() {
// 得到dbrootDir下的所有子目录
dirs, err := ioutil.ReadDir(sm.dbrootDir)
if err != nil {
panic(err)
}
for _, dir := range dirs {
if dir.IsDir() {
dbPath := sm.dbrootDir + "/" + dir.Name()
if sm.isLevelDB(dbPath) {
db, err := NewLevelDBStorage(dbPath)
if err != nil {
panic(err)
}
sm.db[dir.Name()] = db
}
}
}
}
func (sm *StorageManager) Close() {
for _, db := range sm.db {
db.Close()