func()

in pkg/controller/ingress/reconcile/applier/server.go [49:101]


func (s *serverApplier) Apply(ctx context.Context) error {
	traceID := ctx.Value(util.TraceID)

	servers, err := s.albProvider.ListALBServers(ctx, s.serverGroupID)
	if err != nil {
		return err
	}
	s.logger.V(util.SynLogLevel).Info("apply servers",
		"endpoints", s.endpoints,
		"traceID", traceID)
	// todo matched endpoints need check and update weight
	_, unmatchedResEndpoints, unmatchedSDKEndpoints := matchEndpointWithTargets(s.endpoints, servers, s.trafficPolicy)

	if len(unmatchedResEndpoints) != 0 {
		s.logger.V(util.SynLogLevel).Info("apply servers",
			"unmatchedResEndpoints", unmatchedResEndpoints,
			"traceID", traceID)
	}
	if len(unmatchedSDKEndpoints) != 0 {
		s.logger.V(util.SynLogLevel).Info("apply servers",
			"unmatchedSDKEndpoints", unmatchedSDKEndpoints,
			"traceID", traceID)
	}

	if len(unmatchedResEndpoints) == 0 && len(unmatchedSDKEndpoints) == 0 {
		return nil
	}

	// If the number of servers to be added and deleted is less than 40, please call the replacement method, and the others are called separately
	if len(unmatchedResEndpoints) != 0 && len(unmatchedResEndpoints) < util.BatchReplaceServersMaxNum &&
		len(unmatchedSDKEndpoints) != 0 && len(unmatchedSDKEndpoints) < util.BatchReplaceServersMaxNum {
		if err := s.albProvider.ReplaceALBServers(ctx, s.serverGroupID, unmatchedResEndpoints, unmatchedSDKEndpoints); err != nil {
			return err
		}
		// TODO print err
		updateTargetHealthPodCondition(ctx, s.kubeClient, k8s.BuildReadinessGatePodConditionType(), s.endpoints)

		return nil
	}
	if len(unmatchedSDKEndpoints) != 0 {
		if err := s.albProvider.DeregisterALBServers(ctx, s.serverGroupID, unmatchedSDKEndpoints); err != nil {
			return err
		}
	}
	if len(unmatchedResEndpoints) != 0 {
		if err := s.albProvider.RegisterALBServers(ctx, s.serverGroupID, unmatchedResEndpoints); err != nil {
			return err
		}
		updateTargetHealthPodCondition(ctx, s.kubeClient, k8s.BuildReadinessGatePodConditionType(), s.endpoints)
	}

	return nil
}