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

  1. No user action needed for transient failures — the workflow key is requeued and reconciled again on the next workqueue tick.
  2. If persistent, restart the workflow-controller to rebuild informer indexes.
  3. Check controller startup logs to confirm the pod informer and WorkflowIndex are registered and synced.
  4. 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

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


AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03). Data as JSON: /api/errors/2f6a62b15d6dbc23. Report an issue: GitHub.