95 lines
1.5 KiB
Go
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
|
|
}
|