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 }