|
@@ -148,13 +148,15 @@ func (s *globalLimitService) AddGlobalLimit(ctx context.Context, req v1.GlobalLi
|
|
|
Uid: req.Uid,
|
|
|
}
|
|
|
result, e := s.tcpLimit.AddTcpLimit(ctx, tcpLimitReq)
|
|
|
- mu.Lock()
|
|
|
if e != nil {
|
|
|
+ // 只在修改共享的错误变量时加锁
|
|
|
+ mu.Lock()
|
|
|
err = e
|
|
|
+ mu.Unlock()
|
|
|
} else {
|
|
|
+ // 不需要加锁,因为tcpLimitRuleId只被这一个goroutine修改
|
|
|
tcpLimitRuleId = result
|
|
|
}
|
|
|
- mu.Unlock()
|
|
|
})
|
|
|
|
|
|
// 启动udpLimit调用 - 使用独立的请求参数副本
|
|
@@ -167,13 +169,15 @@ func (s *globalLimitService) AddGlobalLimit(ctx context.Context, req v1.GlobalLi
|
|
|
Uid: req.Uid,
|
|
|
}
|
|
|
result, e := s.udpLimit.AddUdpLimit(ctx, udpLimitReq)
|
|
|
- mu.Lock()
|
|
|
if e != nil {
|
|
|
+ // 只在修改共享的错误变量时加锁
|
|
|
+ mu.Lock()
|
|
|
err = e
|
|
|
+ mu.Unlock()
|
|
|
} else {
|
|
|
+ // 不需要加锁,因为udpLimitRuleId只被这一个goroutine修改
|
|
|
udpLimitRuleId = result
|
|
|
}
|
|
|
- mu.Unlock()
|
|
|
})
|
|
|
|
|
|
// 启动webLimit调用 - 使用独立的请求参数副本
|
|
@@ -186,25 +190,29 @@ func (s *globalLimitService) AddGlobalLimit(ctx context.Context, req v1.GlobalLi
|
|
|
Uid: req.Uid,
|
|
|
}
|
|
|
result, e := s.webLimit.AddWebLimit(ctx, webLimitReq)
|
|
|
- mu.Lock()
|
|
|
if e != nil {
|
|
|
+ // 只在修改共享的错误变量时加锁
|
|
|
+ mu.Lock()
|
|
|
err = e
|
|
|
+ mu.Unlock()
|
|
|
} else {
|
|
|
+ // 不需要加锁,因为webLimitRuleId只被这一个goroutine修改
|
|
|
webLimitRuleId = result
|
|
|
}
|
|
|
- mu.Unlock()
|
|
|
})
|
|
|
|
|
|
// 启动gatewayGroup调用
|
|
|
wg.Go(func() {
|
|
|
result, e := s.gateWayGroup.AddGatewayGroup(ctx, gateWayReq)
|
|
|
- mu.Lock()
|
|
|
if e != nil {
|
|
|
+ // 只在修改共享的错误变量时加锁
|
|
|
+ mu.Lock()
|
|
|
err = e
|
|
|
+ mu.Unlock()
|
|
|
} else {
|
|
|
+ // 不需要加锁,因为gateWayGroupId只被这一个goroutine修改
|
|
|
gateWayGroupId = result
|
|
|
}
|
|
|
- mu.Unlock()
|
|
|
})
|
|
|
|
|
|
// 等待所有调用完成
|