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

95 lines
1.5 KiB
Go

package iplibrary
import (
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
"os"
)
func MigrateSQLiteIPListToKV(sqlitePath string) error {
_, err := os.Stat(sqlitePath)
if err != nil {
if os.IsNotExist(err) {
return nil
}
return err
}
remotelogs.Println("IP_LIST_DB", "migrating sqlite data to kvstore ...")
src, err := NewSQLiteIPList()
if err != nil {
return err
}
defer func() {
_ = src.Close()
}()
dst, err := NewKVIPList()
if err != nil {
return err
}
defer func() {
_ = dst.Close()
}()
err = dst.ipTable.DB().Truncate()
if err != nil {
return err
}
var offset int64
const size int64 = 1000
for {
items, goNext, readErr := src.ReadItems(offset, size)
if readErr != nil {
return readErr
}
for _, item := range items {
addErr := dst.AddItem(item)
if addErr != nil {
return addErr
}
}
if !goNext {
break
}
offset += size
}
version, err := src.ReadMaxVersion()
if err != nil {
return err
}
if version > 0 {
err = dst.UpdateMaxVersion(version)
if err != nil {
return err
}
}
err = dst.Flush()
if err != nil {
return err
}
err = removeSQLiteFiles(sqlitePath)
if err != nil {
return err
}
remotelogs.Println("IP_LIST_DB", "migrated sqlite data to kvstore")
return nil
}
func removeSQLiteFiles(path string) error {
for _, filename := range []string{path, path + "-shm", path + "-wal"} {
err := os.Remove(filename)
if err != nil && !os.IsNotExist(err) {
return err
}
}
return nil
}