argoproj/argo-workflows · warning
failed to get pods from informer: %w
Error message
failed to get pods from informer: %w
What it means
processArtifactGCCompletion queries the controller's pod informer index (WorkflowIndex) for all pods of this workflow to find completed artifact GC pods. An error from GetPodsByIndex means the informer index lookup failed (not that no pods exist), wrapped at workflow/controller/artifact_gc.go:553.
Source
Thrown at workflow/controller/artifact_gc.go:553
}
_, err = woc.controller.kubeclientset.CoreV1().Pods(woc.wf.Namespace).Create(ctx, pod, metav1.CreateOptions{})
if err != nil {
if !apierr.IsAlreadyExists(err) {
return nil, fmt.Errorf("failed to create pod: %w", err)
}
woc.log.WithField("name", pod.Name).Warn(ctx, "Artifact GC Pod already exists")
}
return pod, nil
}
// go through any GC pods that are already running and may have completed
func (woc *wfOperationCtx) processArtifactGCCompletion(ctx context.Context) error {
// check if any previous Artifact GC Pods completed
pods, err := woc.controller.PodController.GetPodsByIndex(indexes.WorkflowIndex, woc.wf.GetNamespace()+"/"+woc.wf.GetName())
if err != nil {
return fmt.Errorf("failed to get pods from informer: %w", err)
}
for _, obj := range pods {
pod := obj.(*corev1.Pod)
if pod.Labels[common.LabelKeyComponent] != artifactGCComponent { // make sure it's an Artifact GC Pod
continue
}
// make sure we didn't already process this one
if woc.wf.Status.ArtifactGCStatus.IsArtifactGCPodRecouped(pod.Name) {
// already processed
continue
}
phase := pod.Status.Phase
// if Pod is done processing the results
if phase == corev1.PodSucceeded || phase == corev1.PodFailed {View on GitHub (pinned to 35bff19146)
Solutions
- No user action needed for transient failures — the workflow key is requeued and reconciled again on the next workqueue tick.
- If persistent, restart the workflow-controller to rebuild informer indexes.
- Check controller startup logs to confirm the pod informer and WorkflowIndex are registered and synced.
- Upgrade Argo Workflows if your version has a known pod-indexer bug.
Defensive patterns
Strategy: retry
Try / catch
if strings.Contains(err.Error(), "failed to get pods from informer") { /* transient: controller requeues automatically; restart if persistent */ } Prevention
- Monitor informer HasSynced/health in controller metrics.
- Give the controller time to sync pod informers after startup before heavy reconcile load.
- Restart the controller on persistent index errors.
When it happens
Trigger: The pod informer's index for key namespace/name errors — typically empty/invalid key or an informer index that was never built/corrupted during controller startup or cache resync.
Common situations: Reconciliation racing controller startup before pod informer sync; workflow name/namespace producing an invalid index key (shouldn't happen normally); memory pressure or panics corrupting the informer store.
Related errors
- failed to get WorkflowArtifactGCTask by key %q: %w
- can't process Artifact GC Strategy %s: template name %q belo
- can't find podInfo for podName %q
- can't find template with name %q
- failed to list SSO RBAC service accounts: %w
AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03).
Data as JSON: /api/errors/2f6a62b15d6dbc23.
Report an issue: GitHub.