Skip to content

Commit 4cc76b0

Browse files
committed
dedup max addition calculation
1 parent 7a2218b commit 4cc76b0

File tree

1 file changed

+39
-53
lines changed

1 file changed

+39
-53
lines changed

pkg/targetgroupbinding/resource_manager.go

Lines changed: 39 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
7979
type 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

Comments
 (0)