完善更新记录以排查IP分配重复问题
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user