in pkg/provider/alibaba/alb/server.go [230:316]
func (m *ALBProvider) ReplaceALBServers(ctx context.Context, serverGroupID string, resServers []alb.BackendItem, sdkServers []albsdk.BackendServer) error {
if len(serverGroupID) == 0 {
return fmt.Errorf("empty server group id when replace servers error")
}
traceID := ctx.Value(util.TraceID)
if len(resServers) == 0 && len(sdkServers) == 0 {
return nil
}
addedServers, err := transModelBackendsToSDKReplaceServersInServerGroupAddedServers(resServers)
if err != nil {
return err
}
removedServers := make([]albsdk.ReplaceServersInServerGroupRemovedServers, 0)
for _, sdkServer := range sdkServers {
if isServerStatusRemoving(sdkServer.Status) {
continue
}
serverToRemove, err := transSDKBackendServerToReplaceServersInServerGroupRemovedServer(sdkServer)
if err != nil {
return err
}
removedServers = append(removedServers, *serverToRemove)
}
replaceServerFromSgpReq := albsdk.CreateReplaceServersInServerGroupRequest()
replaceServerFromSgpReq.ServerGroupId = serverGroupID
replaceServerFromSgpReq.AddedServers = &addedServers
replaceServerFromSgpReq.RemovedServers = &removedServers
startTime := time.Now()
m.logger.V(util.MgrLogLevel).Info("replacing server in server group",
"serverGroupID", serverGroupID,
"traceID", traceID,
"addedServers", addedServers,
"removedServers", removedServers,
"startTime", startTime,
util.Action, util.ReplaceALBServersInServerGroup)
replaceServerFromSgpResp, err := m.auth.ALB.ReplaceServersInServerGroup(replaceServerFromSgpReq)
if err != nil {
return err
}
m.logger.V(util.MgrLogLevel).Info("replaced server in server group",
"serverGroupID", serverGroupID,
"traceID", traceID,
"requestID", replaceServerFromSgpResp.RequestId,
"elapsedTime", time.Since(startTime).Milliseconds(),
util.Action, util.ReplaceALBServersInServerGroup)
if util.IsWaitServersAsynchronousComplete {
asynchronousStartTime := time.Now()
m.logger.V(util.MgrLogLevel).Info("replacing server in server group asynchronous",
"serverGroupID", serverGroupID,
"traceID", traceID,
"addedServers", addedServers,
"removedServers", removedServers,
"startTime", startTime,
util.Action, util.ReplaceALBServersInServerGroupAsynchronous)
for i := 0; i < util.ReplaceALBServersInServerGroupMaxRetryTimes; i++ {
time.Sleep(util.ReplaceALBServersInServerGroupRetryInterval)
isCompleted, err := isReplaceServersCompleted(ctx, m, serverGroupID, addedServers, removedServers)
if err != nil {
m.logger.V(util.MgrLogLevel).Error(err, "failed to replace server in server group asynchronous",
"serverGroupID", serverGroupID,
"traceID", traceID,
"requestID", replaceServerFromSgpResp.RequestId,
util.Action, util.ReplaceALBServersInServerGroupAsynchronous)
return err
}
if isCompleted {
break
}
}
m.logger.V(util.MgrLogLevel).Info("replaced server in server group asynchronous",
"serverGroupID", serverGroupID,
"traceID", traceID,
"requestID", replaceServerFromSgpResp.RequestId,
"elapsedTime", time.Since(asynchronousStartTime).Milliseconds(),
util.Action, util.ReplaceALBServersInServerGroupAsynchronous)
}
return nil
}