v1.5.1 增强程序稳定性
This commit is contained in:
85
EdgeNode/internal/utils/agents/db_migrate.go
Normal file
85
EdgeNode/internal/utils/agents/db_migrate.go
Normal file
@@ -0,0 +1,85 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user