package agents import ( "github.com/TeaOSLab/EdgeNode/internal/remotelogs" "os" ) func MigrateSQLiteDBToKV(sqlitePath string) error { _, err := os.Stat(sqlitePath) if err != nil { if os.IsNotExist(err) { return nil } return err } remotelogs.Println("AGENT_MANAGER", "migrating sqlite data to kvstore ...") src := NewSQLiteDB(sqlitePath) err = src.Init() if err != nil { return err } defer func() { _ = src.Close() }() dst := NewKVDB() err = dst.Init() if err != nil { return err } defer func() { _ = dst.Close() }() err = dst.table.DB().Truncate() if err != nil { return err } var offset int64 const size int64 = 1000 for { agentIPs, listErr := src.ListAgentIPs(offset, size) if listErr != nil { return listErr } if len(agentIPs) == 0 { break } for _, agentIP := range agentIPs { insertErr := dst.InsertAgentIP(agentIP.Id, agentIP.IP, agentIP.AgentCode) if insertErr != nil { return insertErr } } offset += size } err = dst.Flush() if err != nil { return err } err = removeSQLiteDBFiles(sqlitePath) if err != nil { return err } remotelogs.Println("AGENT_MANAGER", "migrated sqlite data to kvstore") return nil } func removeSQLiteDBFiles(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 }