From 569f680c88f1fb805704caef00c47d29abf87ee2 Mon Sep 17 00:00:00 2001 From: Volodymyr Stoiko Date: Mon, 9 Mar 2026 15:28:01 +0000 Subject: [PATCH 1/2] Verify hub/front pods are ready by conditions --- cmd/tapRunner.go | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/cmd/tapRunner.go b/cmd/tapRunner.go index f4f46aae9..5a054922f 100644 --- a/cmd/tapRunner.go +++ b/cmd/tapRunner.go @@ -147,11 +147,20 @@ func printNoPodsFoundSuggestion(targetNamespaces []string) { log.Warn().Msg(fmt.Sprintf("Did not find any currently running pods that match the regex argument, %s will automatically target matching pods if any are created later%s", misc.Software, suggestionStr)) } +func isPodReady(pod *core.Pod) bool { + for _, condition := range pod.Status.Conditions { + if condition.Type == core.PodReady { + return condition.Status == core.ConditionTrue + } + } + return false +} + func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) { podExactRegex := regexp.MustCompile(fmt.Sprintf("^%s", kubernetes.HubPodName)) podWatchHelper := kubernetes.NewPodWatchHelper(kubernetesProvider, podExactRegex) eventChan, errorChan := kubernetes.FilteredWatch(ctx, podWatchHelper, []string{config.Config.Tap.Release.Namespace}, podWatchHelper) - isPodReady := false + podReady := false timeAfter := time.After(120 * time.Second) for { @@ -183,8 +192,8 @@ func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, c Interface("containers-statuses", modifiedPod.Status.ContainerStatuses). Msg("Watching pod.") - if modifiedPod.Status.Phase == core.PodRunning && !isPodReady { - isPodReady = true + if isPodReady(modifiedPod) && !podReady { + podReady = true ready.Lock() ready.Hub = true @@ -223,7 +232,7 @@ func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, c cancel() case <-timeAfter: - if !isPodReady { + if !podReady { log.Error(). Str("pod", kubernetes.HubPodName). Msg("Pod was not ready in time.") @@ -242,7 +251,7 @@ func watchFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, podExactRegex := regexp.MustCompile(fmt.Sprintf("^%s", kubernetes.FrontPodName)) podWatchHelper := kubernetes.NewPodWatchHelper(kubernetesProvider, podExactRegex) eventChan, errorChan := kubernetes.FilteredWatch(ctx, podWatchHelper, []string{config.Config.Tap.Release.Namespace}, podWatchHelper) - isPodReady := false + podReady := false timeAfter := time.After(120 * time.Second) for { @@ -274,8 +283,8 @@ func watchFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, Interface("containers-statuses", modifiedPod.Status.ContainerStatuses). Msg("Watching pod.") - if modifiedPod.Status.Phase == core.PodRunning && !isPodReady { - isPodReady = true + if isPodReady(modifiedPod) && !podReady { + podReady = true ready.Lock() ready.Front = true ready.Unlock() @@ -312,7 +321,7 @@ func watchFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, Msg("Failed creating pod.") case <-timeAfter: - if !isPodReady { + if !podReady { log.Error(). Str("pod", kubernetes.FrontPodName). Msg("Pod was not ready in time.") From 9806cc9bbb38b9be2e76da915afad8bf7ca27d0e Mon Sep 17 00:00:00 2001 From: Volodymyr Stoiko Date: Mon, 9 Mar 2026 18:44:24 +0000 Subject: [PATCH 2/2] log waiting for readiness --- cmd/tapRunner.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmd/tapRunner.go b/cmd/tapRunner.go index 5a054922f..c92a30040 100644 --- a/cmd/tapRunner.go +++ b/cmd/tapRunner.go @@ -161,6 +161,7 @@ func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, c podWatchHelper := kubernetes.NewPodWatchHelper(kubernetesProvider, podExactRegex) eventChan, errorChan := kubernetes.FilteredWatch(ctx, podWatchHelper, []string{config.Config.Tap.Release.Namespace}, podWatchHelper) podReady := false + podRunning := false timeAfter := time.After(120 * time.Second) for { @@ -199,6 +200,9 @@ func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, c ready.Hub = true ready.Unlock() log.Info().Str("pod", kubernetes.HubPodName).Msg("Ready.") + } else if modifiedPod.Status.Phase == core.PodRunning && !podRunning { + podRunning = true + log.Info().Str("pod", kubernetes.HubPodName).Msg("Waiting for readiness...") } ready.Lock() @@ -252,6 +256,7 @@ func watchFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, podWatchHelper := kubernetes.NewPodWatchHelper(kubernetesProvider, podExactRegex) eventChan, errorChan := kubernetes.FilteredWatch(ctx, podWatchHelper, []string{config.Config.Tap.Release.Namespace}, podWatchHelper) podReady := false + podRunning := false timeAfter := time.After(120 * time.Second) for { @@ -289,6 +294,9 @@ func watchFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, ready.Front = true ready.Unlock() log.Info().Str("pod", kubernetes.FrontPodName).Msg("Ready.") + } else if modifiedPod.Status.Phase == core.PodRunning && !podRunning { + podRunning = true + log.Info().Str("pod", kubernetes.FrontPodName).Msg("Waiting for readiness...") } ready.Lock()