argoproj/argo-workflows · error

failed to get pod from informer store: %w

Error message

failed to get pod from informer store: %w

What it means

createAgentPod looks up the agent pod for the workflow from the controller's pod informer store (not a live API call). If the informer store lookup fails, the error is wrapped as 'failed to get pod from informer store: %w'. Note a clean 'not found' result (nil pod, nil err) is expected and proceeds to pod creation; this error means the lookup itself failed.

Source

Thrown at workflow/controller/agent.go:123

			MountPath: "/etc/ssl/certs/ca-certificates/",
			ReadOnly:  true,
		}

		return certVolume, certVolumeMount, nil
	}
	return nil, nil, nil
}

func (woc *wfOperationCtx) createAgentPod(ctx context.Context) (*apiv1.Pod, error) {
	if woc.controller.Config.DisableAgentPodCreation {
		return nil, nil
	}
	podName := woc.getAgentPodName()
	ctx, log := woc.log.WithField("podName", podName).InContext(ctx)

	pod, err := woc.controller.PodController.GetPod(woc.wf.Namespace, podName)
	if err != nil {
		return nil, fmt.Errorf("failed to get pod from informer store: %w", err)
	}
	if pod != nil {
		return pod, nil
	}

	certVolume, certVolumeMount, err := woc.getCertVolumeMount(ctx, common.CACertificatesVolumeMountName)
	if err != nil {
		return nil, err
	}

	pluginSidecars, pluginVolumes, err := woc.getExecutorPlugins(ctx)
	if err != nil {
		return nil, err
	}

	envVars := []apiv1.EnvVar{
		{Name: common.EnvVarWorkflowName, Value: woc.wf.Name},
		{Name: common.EnvVarWorkflowUID, Value: string(woc.wf.UID)},

View on GitHub (pinned to 35bff19146)

Solutions

  1. Wait for the controller to resync and the workflow to be re-reconciled (reconciliation is periodic; this is often transient)
  2. Check controller logs around startup for informer sync failures
  3. Restart the workflow-controller if the informer store remains unhealthy
  4. Ensure only one controller instance is reconciling the namespace (leader election healthy)
Defensive patterns

Strategy: retry

Try / catch

pod, err := podController.GetPod(ns, name)
if err != nil {
    // informer store hiccup: requeue and retry on next reconcile
    return nil, fmt.Errorf("...: %w", err)
}

Prevention

When it happens

Trigger: PodController.GetPod(namespace, podName) returns an error during reconcileAgentPod — typically informer cache sync issues, store closed during controller shutdown, or an internal cache error — while creating/reconciling the agent pod.

Common situations: Controller restarting while workflows are being reconciled; informer not yet synced after controller startup; heavy load causing cache resync problems; unit/integration tests exercising createAgentPod with an unprimed informer.

Related errors


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