@@ -53,18 +53,18 @@ func NewDefaultResourceManager(k8sClient client.Client, elbv2Client services.ELB
5353 targetsManager := NewCachedTargetsManager (elbv2Client , logger )
5454 endpointResolver := backend .NewDefaultEndpointResolver (k8sClient , podInfoRepo , failOpenEnabled , endpointSliceEnabled , logger )
5555 return & defaultResourceManager {
56- k8sClient : k8sClient ,
57- targetsManager : targetsManager ,
58- endpointResolver : endpointResolver ,
59- networkingManager : networkingManager ,
60- eventRecorder : eventRecorder ,
61- logger : logger ,
62- vpcID : vpcID ,
63- vpcInfoProvider : vpcInfoProvider ,
64- podInfoRepo : podInfoRepo ,
56+ k8sClient : k8sClient ,
57+ targetsManager : targetsManager ,
58+ endpointResolver : endpointResolver ,
59+ networkingManager : networkingManager ,
60+ eventRecorder : eventRecorder ,
61+ logger : logger ,
62+ vpcID : vpcID ,
63+ vpcInfoProvider : vpcInfoProvider ,
64+ podInfoRepo : podInfoRepo ,
6565 maxTargetsPerInstance : maxTargetsPerInstance ,
66- multiClusterManager : multiClusterManager ,
67- metricsCollector : metricsCollector ,
66+ multiClusterManager : multiClusterManager ,
67+ metricsCollector : metricsCollector ,
6868
6969 invalidVpcCache : cache .NewExpiring (),
7070 invalidVpcCacheTTL : defaultTargetsCacheTTL ,
@@ -77,18 +77,18 @@ var _ ResourceManager = &defaultResourceManager{}
7777
7878// default implementation for ResourceManager.
7979type defaultResourceManager struct {
80- k8sClient client.Client
81- targetsManager TargetsManager
82- endpointResolver backend.EndpointResolver
83- networkingManager networking.NetworkingManager
84- eventRecorder record.EventRecorder
85- logger logr.Logger
86- vpcInfoProvider networking.VPCInfoProvider
87- podInfoRepo k8s.PodInfoRepo
80+ k8sClient client.Client
81+ targetsManager TargetsManager
82+ endpointResolver backend.EndpointResolver
83+ networkingManager networking.NetworkingManager
84+ eventRecorder record.EventRecorder
85+ logger logr.Logger
86+ vpcInfoProvider networking.VPCInfoProvider
87+ podInfoRepo k8s.PodInfoRepo
8888 maxTargetsPerInstance int
89- multiClusterManager MultiClusterManager
90- metricsCollector lbcmetrics.MetricCollector
91- vpcID string
89+ multiClusterManager MultiClusterManager
90+ metricsCollector lbcmetrics.MetricCollector
91+ vpcID string
9292
9393 invalidVpcCache * cache.Expiring
9494 invalidVpcCacheTTL time.Duration
@@ -244,22 +244,8 @@ func (m *defaultResourceManager) reconcileWithIPTargetType(ctx context.Context,
244244 return "" , "" , false , ctrlerrors .NewErrorWithMetrics (controllerName , "update_tracked_ip_targets_error" , err , m .metricsCollector )
245245 }
246246
247- // Log that we're witholding target additions to prevent exceeding max-targets-per-instance
248- var limitedUnmatchedEndpoints []backend.PodEndpoint
249-
250- if m .maxTargetsPerInstance > 0 && len (unmatchedEndpoints ) + totalTargets > m .maxTargetsPerInstance {
251- maxAdditions := m .maxTargetsPerInstance - totalTargets
252- if maxAdditions > 0 {
253- limitedUnmatchedEndpoints = unmatchedEndpoints [:maxAdditions ]
254- }
255- tgbScopedLogger .Info ("Limiting target additions due to max-targets-per-instance configuration" ,
256- "currentTargets" , totalTargets ,
257- "maxTargetsPerInstance" , m .maxTargetsPerInstance ,
258- "proposedAdditions" , len (unmatchedEndpoints ),
259- "numberOmitted" , len (unmatchedEndpoints ) - len (limitedUnmatchedEndpoints ))
260-
261- unmatchedEndpoints = limitedUnmatchedEndpoints
262- }
247+ eligibleTargetsCount := m .getMaxNewTargets (len (unmatchedEndpoints ), totalTargets , tgbScopedLogger )
248+ unmatchedEndpoints = unmatchedEndpoints [:eligibleTargetsCount ]
263249
264250 if err := m .registerPodEndpoints (ctx , tgb , unmatchedEndpoints ); err != nil {
265251 return "" , "" , false , ctrlerrors .NewErrorWithMetrics (controllerName , "register_pod_endpoint_error" , err , m .metricsCollector )
@@ -363,21 +349,8 @@ func (m *defaultResourceManager) reconcileWithInstanceTargetType(ctx context.Con
363349 return "" , "" , false , ctrlerrors .NewErrorWithMetrics (controllerName , "update_tracked_instance_targets_error" , err , m .metricsCollector )
364350 }
365351
366- var limitedUnmatchedEndpoints []backend.NodePortEndpoint
367-
368- if m .maxTargetsPerInstance > 0 && len (unmatchedEndpoints ) + totalTargets > m .maxTargetsPerInstance {
369- maxAdditions := m .maxTargetsPerInstance - totalTargets
370- if maxAdditions > 0 {
371- limitedUnmatchedEndpoints = unmatchedEndpoints [:maxAdditions ]
372- }
373- tgbScopedLogger .Info ("Limiting target additions due to max-targets-per-instance configuration" ,
374- "currentTargets" , totalTargets ,
375- "maxTargetsPerInstance" , m .maxTargetsPerInstance ,
376- "proposedAdditions" , len (unmatchedEndpoints ),
377- "numberOmitted" , len (unmatchedEndpoints ) - len (limitedUnmatchedEndpoints ))
378-
379- unmatchedEndpoints = limitedUnmatchedEndpoints
380- }
352+ eligibleTargetsCount := m .getMaxNewTargets (len (unmatchedEndpoints ), totalTargets , tgbScopedLogger )
353+ unmatchedEndpoints = unmatchedEndpoints [:eligibleTargetsCount ]
381354
382355 if err := m .registerNodePortEndpoints (ctx , tgb , unmatchedEndpoints ); err != nil {
383356 return "" , "" , false , ctrlerrors .NewErrorWithMetrics (controllerName , "update_node_port_endpoints_error" , err , m .metricsCollector )
@@ -841,3 +814,16 @@ func isVPCNotFoundError(err error) bool {
841814 }
842815 return false
843816}
817+
818+ func (m * defaultResourceManager ) getMaxNewTargets (newTargetCount int , currentTargetCount int , tgbScopedLogger logr.Logger ) (maxAdditions int ) {
819+ if m .maxTargetsPerInstance > 0 && newTargetCount + currentTargetCount > m .maxTargetsPerInstance {
820+ maxAdditions = m .maxTargetsPerInstance - currentTargetCount
821+ tgbScopedLogger .Info ("Limiting target additions due to max-targets-per-instance configuration" ,
822+ "currentTargets" , currentTargetCount ,
823+ "maxTargetsPerInstance" , m .maxTargetsPerInstance ,
824+ "proposedAdditions" , newTargetCount )
825+ return maxAdditions
826+ }
827+
828+ return newTargetCount
829+ }
0 commit comments