v1.5.1 增强程序稳定性

This commit is contained in:
robin
2026-03-22 17:37:40 +08:00
parent afbaaa869c
commit 17e182b413
652 changed files with 22949 additions and 34397 deletions

View File

@@ -25,8 +25,10 @@ func (this *IPItemEncoder[T]) EncodeField(value T, fieldName string) ([]byte, er
switch fieldName {
case "expiresAt":
var expiresAt = any(value).(*pb.IPItem).ExpiredAt
if expiresAt < 0 || expiresAt > int64(math.MaxUint32) {
if expiresAt < 0 {
expiresAt = 0
} else if expiresAt > int64(math.MaxUint32) {
expiresAt = int64(math.MaxUint32)
}
var b = make([]byte, 4)
binary.BigEndian.PutUint32(b, uint32(expiresAt))

View File

@@ -0,0 +1,94 @@
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
}

View File

@@ -117,11 +117,16 @@ func (this *IPListManager) Init() {
// 检查sqlite文件是否存在以便决定使用sqlite还是kv
var sqlitePath = Tea.Root + "/data/ip_list.db"
_, sqliteErr := os.Stat(sqlitePath)
var db IPListDB
var err error
if sqliteErr == nil || !teaconst.EnableKVCacheStore {
db, err = NewSQLiteIPList()
if sqliteErr == nil {
err = MigrateSQLiteIPListToKV(sqlitePath)
if err != nil {
remotelogs.Error("IP_LIST_MANAGER", "migrate sqlite data failed: "+err.Error())
db, err = NewSQLiteIPList()
} else {
db, err = NewKVIPList()
}
} else {
db, err = NewKVIPList()
}