v1.5.1 增强程序稳定性
This commit is contained in:
@@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user