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

@@ -9,7 +9,9 @@ import (
"github.com/TeaOSLab/EdgeDNS/internal/models"
"github.com/TeaOSLab/EdgeDNS/internal/remotelogs"
"github.com/TeaOSLab/EdgeDNS/internal/rpc"
"github.com/iwind/TeaGo/types"
"sync"
"sync/atomic"
"time"
)
@@ -17,11 +19,13 @@ import (
type RecordManager struct {
recordsMap map[int64]*models.DomainRecords // domainId => RecordsMap
db *dbs.DB
locker sync.RWMutex
version int64
db *dbs.DB
locker sync.RWMutex
version int64
dbWriteFailures atomic.Int64 // DB 写入累计失败次数
notifier chan bool
readyCh chan struct{} // 初始加载完成后关闭
}
// NewRecordManager 获取新记录管理器对象
@@ -30,6 +34,7 @@ func NewRecordManager(db *dbs.DB) *RecordManager {
db: db,
recordsMap: map[int64]*models.DomainRecords{},
notifier: make(chan bool, 8),
readyCh: make(chan struct{}),
}
}
@@ -57,6 +62,9 @@ func (this *RecordManager) Start() {
}
}
// 通知初始加载完成
close(this.readyCh)
// 更新
var ticker = time.NewTicker(30 * time.Second)
for {
@@ -158,7 +166,7 @@ func (this *RecordManager) FindRecords(domainId int64, routeCodes []string, reco
this.locker.RLock()
domainRecords, ok := this.recordsMap[domainId]
if ok {
records, routeCode = domainRecords.Find(routeCodes, recordName, recordType, sharedNodeConfig.Answer, strictMode)
records, routeCode = domainRecords.Find(routeCodes, recordName, recordType, dnsNodeConfig().Answer, strictMode)
}
this.locker.RUnlock()
return
@@ -190,7 +198,8 @@ func (this *RecordManager) processRecord(record *pb.NSRecord) {
if this.db != nil {
err := this.db.DeleteRecord(record.Id)
if err != nil {
remotelogs.Error("RECORD_MANAGER", "delete record from db failed: "+err.Error())
count := this.dbWriteFailures.Add(1)
remotelogs.Error("RECORD_MANAGER", "delete record from db failed (total failures: "+types.String(count)+"): "+err.Error())
}
}
@@ -201,7 +210,8 @@ func (this *RecordManager) processRecord(record *pb.NSRecord) {
if this.db != nil {
exists, err := this.db.ExistsRecord(record.Id)
if err != nil {
remotelogs.Error("RECORD_MANAGER", "query failed: "+err.Error())
count := this.dbWriteFailures.Add(1)
remotelogs.Error("RECORD_MANAGER", "query failed (total failures: "+types.String(count)+"): "+err.Error())
} else {
var routeIds = []string{}
for _, route := range record.NsRoutes {
@@ -211,12 +221,14 @@ func (this *RecordManager) processRecord(record *pb.NSRecord) {
if exists {
err = this.db.UpdateRecord(record.Id, record.NsDomain.Id, record.Name, record.Type, record.Value, record.MxPriority, record.SrvPriority, record.SrvWeight, record.SrvPort, record.CaaFlag, record.CaaTag, record.Ttl, record.Weight, routeIds, record.Version)
if err != nil {
remotelogs.Error("RECORD_MANAGER", "update failed: "+err.Error())
count := this.dbWriteFailures.Add(1)
remotelogs.Error("RECORD_MANAGER", "update failed (total failures: "+types.String(count)+"): "+err.Error())
}
} else {
err = this.db.InsertRecord(record.Id, record.NsDomain.Id, record.Name, record.Type, record.Value, record.MxPriority, record.SrvPriority, record.SrvWeight, record.SrvPort, record.CaaFlag, record.CaaTag, record.Ttl, record.Weight, routeIds, record.Version)
if err != nil {
remotelogs.Error("RECORD_MANAGER", "insert failed: "+err.Error())
count := this.dbWriteFailures.Add(1)
remotelogs.Error("RECORD_MANAGER", "insert failed (total failures: "+types.String(count)+"): "+err.Error())
}
}
}