From 76b132a8b7cb428d9a352bd44f52877178254c98 Mon Sep 17 00:00:00 2001 From: kingecg Date: Sun, 8 Jun 2025 10:48:59 +0800 Subject: [PATCH] =?UTF-8?q?storage=20manager=20=E6=B7=BB=E5=8A=A0open?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- storage/storage.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/storage/storage.go b/storage/storage.go index 3e7df24..009d154 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -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()