完善更新记录以排查IP分配重复问题

This commit is contained in:
2025-08-21 18:34:30 +08:00
parent e2c87cfa8b
commit 7e7d706f84
5 changed files with 52 additions and 18 deletions

View File

@@ -6,7 +6,7 @@ import (
"gorm.io/gorm"
)
func RecordChange(tx *gorm.DB, changes []model.Change) error {
func RecordChangeEdges(tx *gorm.DB, changes []model.ChangeEdge) error {
if len(changes) == 0 {
return nil
}
@@ -22,3 +22,7 @@ func RecordChange(tx *gorm.DB, changes []model.Change) error {
}
return nil
}
func RecordChangeCity(tx *gorm.DB, change model.ChangeCity) error {
return tx.Create(&change).Error
}

View File

@@ -68,7 +68,7 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
// 如果每个网关在此城市都有节点且无需改变,就不需要重新分配节点
// 相当于直接重新提交配置,此流程下配置更新是幂等的
var gateways2Update []model.Gateway
var gateways2Change []model.Gateway
for _, gateway := range gateways {
oldConfig, exists := oldConfigsMap[gateway][city.Hash]
if exists && oldConfig.IsChange != 1 {
@@ -80,17 +80,17 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
},
}
} else {
gateways2Update = append(gateways2Update, gateway)
gateways2Change = append(gateways2Change, gateway)
}
}
if len(gateways2Update) == 0 {
count := len(gateways2Change)
if len(gateways2Change) == 0 {
continue
}
// 否则获取足量新节点
offset := city.Offset
count := len(gateways2Update)
if count > city.EdgesCount {
slog.Warn(fmt.Sprintf("城市节点数量不足,跳过本次更新,城市:%s节点数%d网关数%d", city.Name, city.EdgesCount, count))
continue
@@ -113,9 +113,9 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
// 更新网关配置
var configs2Create []model.Config
var configs2Update []model.ConfigUpdate
var changes []model.Change
var changes []model.ChangeEdge
for iGateway, gateway := range gateways2Update {
for iGateway, gateway := range gateways2Change {
oldConfig, exists := oldConfigsMap[gateway][city.Hash]
newConfig := edges[iGateway]
@@ -129,8 +129,9 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
IsChange: u.P(0),
})
changes = append(changes, model.Change{
changes = append(changes, model.ChangeEdge{
Time: now,
CityId: city.Id,
Gateway: gateway.Macaddr,
OldEdge: oldConfig.Macaddr,
NewEdge: newConfig.Macaddr,
@@ -157,8 +158,9 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
InnerIp: fmt.Sprintf("172.16.%d.%d", gateway.Id, iCity+2),
})
changes = append(changes, model.Change{
changes = append(changes, model.ChangeEdge{
Time: now,
CityId: city.Id,
Gateway: gateway.Macaddr,
OldEdge: "",
NewEdge: newConfig.Macaddr,
@@ -186,9 +188,20 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
if err != nil {
return fmt.Errorf("更新城市 %s 的偏移量失败:%w", city.Name, err)
}
err = RecordChange(tx, changes)
err = RecordChangeCity(tx, model.ChangeCity{
Time: now,
CityId: city.Id,
Count: count,
OffsetOld: city.Offset,
OffsetNew: offset,
})
if err != nil {
return fmt.Errorf("记录变更失败:%w", err)
return fmt.Errorf("记录城市变更失败:%w", err)
}
err = RecordChangeEdges(tx, changes)
if err != nil {
return fmt.Errorf("记录节点变更失败:%w", err)
}
}