86 lines
1.4 KiB
Go
86 lines
1.4 KiB
Go
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
|
|
}
|