Files
waf-platform/EdgeNode/internal/caches/list_file_migrate.go
2026-03-22 17:37:40 +08:00

97 lines
1.5 KiB
Go

package caches
import (
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
"os"
)
func MigrateSQLiteFileListDir(sqliteDir string, kvDir string) error {
if len(sqliteDir) == 0 || len(kvDir) == 0 {
return nil
}
_, err := os.Stat(sqliteDir)
if err != nil {
if os.IsNotExist(err) {
return nil
}
return err
}
remotelogs.Println("CACHE", "migrating sqlite indexes from '"+sqliteDir+"' to '"+kvDir+"' ...")
src := NewSQLiteFileList(sqliteDir).(*SQLiteFileList)
err = src.Init()
if err != nil {
return err
}
defer func() {
_ = src.Close()
}()
dst := NewKVFileList(kvDir)
err = dst.Init()
if err != nil {
return err
}
defer func() {
_ = dst.Close()
}()
err = dst.CleanAll()
if err != nil {
return err
}
for _, db := range src.dbList {
if db == nil {
continue
}
var lastId int64
for {
hashes, maxId, listErr := db.ListHashes(lastId)
if listErr != nil {
return listErr
}
if len(hashes) == 0 {
break
}
for _, hash := range hashes {
item, readErr := db.ReadItem(hash)
if readErr != nil {
return readErr
}
if item == nil {
continue
}
addErr := dst.Add(hash, item)
if addErr != nil {
return addErr
}
}
lastId = maxId
}
}
for _, store := range dst.stores {
if store != nil && store.rawStore != nil {
err = store.rawStore.Flush()
if err != nil {
return err
}
}
}
err = os.RemoveAll(sqliteDir)
if err != nil {
return err
}
remotelogs.Println("CACHE", "migrated sqlite indexes to pebble")
return nil
}