Skip to content

Commit 28a7d16

Browse files
committed
list pod keys
1 parent b0a1fd5 commit 28a7d16

File tree

1 file changed

+19
-48
lines changed

1 file changed

+19
-48
lines changed

pkg/targetgroupbinding/resource_manager.go

Lines changed: 19 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ type ResourceManager interface {
4040
// NewDefaultResourceManager constructs new defaultResourceManager.
4141
func NewDefaultResourceManager(k8sClient client.Client, elbv2Client services.ELBV2, ec2Client services.EC2,
4242
podInfoRepo k8s.PodInfoRepo, sgManager networking.SecurityGroupManager, sgReconciler networking.SecurityGroupReconciler,
43-
vpcID string, clusterName string, eventRecorder record.EventRecorder, logger logr.Logger, useEndpointSlices bool, disabledRestrictedSGRulesFlag bool, vpcInfoProvider networking.VPCInfoProvider) *defaultResourceManager {
43+
vpcID string, clusterName string, eventRecorder record.EventRecorder, logger logr.Logger, useEndpointSlices bool,
44+
disabledRestrictedSGRulesFlag bool, vpcInfoProvider networking.VPCInfoProvider) *defaultResourceManager {
4445
targetsManager := NewCachedTargetsManager(elbv2Client, logger)
4546
endpointResolver := backend.NewDefaultEndpointResolver(k8sClient, podInfoRepo, logger)
4647

@@ -58,6 +59,7 @@ func NewDefaultResourceManager(k8sClient client.Client, elbv2Client services.ELB
5859
logger: logger,
5960
vpcID: vpcID,
6061
vpcInfoProvider: vpcInfoProvider,
62+
podInfoRepo: podInfoRepo,
6163

6264
targetHealthRequeueDuration: defaultTargetHealthRequeueDuration,
6365
enableEndpointSlices: useEndpointSlices,
@@ -75,6 +77,7 @@ type defaultResourceManager struct {
7577
eventRecorder record.EventRecorder
7678
logger logr.Logger
7779
vpcInfoProvider networking.VPCInfoProvider
80+
podInfoRepo k8s.PodInfoRepo
7881
vpcID string
7982

8083
targetHealthRequeueDuration time.Duration
@@ -334,58 +337,26 @@ func (m *defaultResourceManager) updateTargetHealthPodConditionForPod(ctx contex
334337
// updatePodAsHealthyForDeletedTGB updates pod's targetHealth condition as healthy when deleting a TGB
335338
// if the pod has readiness Gate.
336339
func (m *defaultResourceManager) updatePodAsHealthyForDeletedTGB(ctx context.Context, tgb *elbv2api.TargetGroupBinding) error {
337-
svcKey := buildServiceReferenceKey(tgb, tgb.Spec.ServiceRef)
338340
targetHealthCondType := BuildTargetHealthPodConditionType(tgb)
339-
resolveOpts := []backend.EndpointResolveOption{
340-
backend.WithPodReadinessGate(targetHealthCondType),
341-
}
342-
343-
var endpoints []backend.PodEndpoint
344-
var err error
345341

346-
// Decide whether to use Endpoints or EndpointSlices based on config flag
347-
if m.enableEndpointSlices {
348-
endpoints, _, err = m.endpointResolver.ResolvePodEndpointsFromSlices(ctx, svcKey, tgb.Spec.ServiceRef.Port, resolveOpts...)
349-
} else {
350-
endpoints, _, err = m.endpointResolver.ResolvePodEndpoints(ctx, svcKey, tgb.Spec.ServiceRef.Port, resolveOpts...)
351-
}
352-
if err != nil {
353-
if errors.Is(err, backend.ErrNotFound) {
354-
m.eventRecorder.Event(tgb, corev1.EventTypeWarning, k8s.TargetGroupBindingEventReasonBackendNotFound, err.Error())
355-
return m.Cleanup(ctx, tgb)
342+
allPodKeys := m.podInfoRepo.ListKeys(ctx)
343+
for _, podKey := range allPodKeys {
344+
pod, exists, err := m.podInfoRepo.Get(ctx, podKey)
345+
if err != nil {
346+
return err
356347
}
357-
return err
358-
}
359-
360-
tgARN := tgb.Spec.TargetGroupARN
361-
targets, err := m.targetsManager.ListTargets(ctx, tgARN)
362-
if err != nil {
363-
return err
364-
}
365-
notDrainingTargets, _ := partitionTargetsByDrainingStatus(targets)
366-
matchedEndpointAndTargets, unmatchedEndpointAndTargets, _ := matchPodEndpointWithTargets(endpoints, notDrainingTargets)
367-
368-
var podsToUpdate []k8s.PodInfo
369-
for _, endpointAndTarget := range matchedEndpointAndTargets {
370-
pod := endpointAndTarget.endpoint.Pod
371-
if pod.HasAnyOfReadinessGates([]corev1.PodConditionType{targetHealthCondType}) {
372-
podsToUpdate = append(podsToUpdate, pod)
348+
if !exists {
349+
return errors.New("couldn't find podInfo for ready endpoint")
373350
}
374-
}
375-
for _, endpoint := range unmatchedEndpointAndTargets {
376-
pod := endpoint.Pod
377351
if pod.HasAnyOfReadinessGates([]corev1.PodConditionType{targetHealthCondType}) {
378-
podsToUpdate = append(podsToUpdate, pod)
379-
}
380-
}
381-
for _, pod := range podsToUpdate {
382-
targetHealth := &elbv2sdk.TargetHealth{
383-
State: awssdk.String(elbv2sdk.TargetHealthStateEnumHealthy),
384-
Description: awssdk.String("Target Group Binding is deleted"),
385-
}
386-
_, err := m.updateTargetHealthPodConditionForPod(ctx, pod, targetHealth, targetHealthCondType)
387-
if err != nil {
388-
return err
352+
targetHealth := &elbv2sdk.TargetHealth{
353+
State: awssdk.String(elbv2sdk.TargetHealthStateEnumHealthy),
354+
Description: awssdk.String("Target Group Binding is deleted"),
355+
}
356+
_, err := m.updateTargetHealthPodConditionForPod(ctx, pod, targetHealth, targetHealthCondType)
357+
if err != nil {
358+
return err
359+
}
389360
}
390361
}
391362
return nil

0 commit comments

Comments
 (0)