argoproj/argo-workflows · error

was not able to retrieve node

Error message

was not able to retrieve node

What it means

getArtifactAndDriver could not find the workflow node status for the requested nodeID (wf.Status.Nodes.Get failed). Without the node there is no artifact metadata, so the artifact request cannot proceed; the underlying get error is logged but deliberately omitted from the returned message.

Source

Thrown at server/artifacts/artifact_server.go:681

	}

	http.Error(w, http.StatusText(statusCode), statusCode)
	if statusCode == http.StatusInternalServerError {
		logging.RequireLoggerFromContext(ctx).WithError(err).Error(ctx, "Artifact Server returned internal error")
	}
}

func (a *ArtifactServer) getArtifactAndDriver(ctx context.Context, nodeID, artifactName string, isInput bool, wf *wfv1.Workflow, fileName *string) (*wfv1.Artifact, common.ArtifactDriver, error) {
	logger := logging.RequireLoggerFromContext(ctx)

	kubeClient := auth.GetKubeClient(ctx)

	var art *wfv1.Artifact

	nodeStatus, err := wf.Status.Nodes.Get(nodeID)
	if err != nil {
		logger.WithError(err).WithField("nodeID", nodeID).Error(ctx, "Was unable to retrieve node")
		return nil, nil, fmt.Errorf("was not able to retrieve node")
	}
	if isInput {
		art = nodeStatus.Inputs.GetArtifactByName(artifactName)
	} else {
		art = nodeStatus.Outputs.GetArtifactByName(artifactName)
	}
	if art == nil {
		return nil, nil, fmt.Errorf("artifact not found: %s, isInput=%t, Workflow Status=%+v", artifactName, isInput, wf.Status)
	}

	// Artifact Location can be defined in various places:
	// 1. In the Artifact itself
	// 2. Defined by Controller configmap
	// 3. Workflow spec defines artifactRepositoryRef which is a ConfigMap which defines the location
	// 4. Template defines ArchiveLocation
	// 5. Inline Template

	var archiveLocation *wfv1.ArtifactLocation

View on GitHub (pinned to 35bff19146)

Solutions

  1. Verify the node ID belongs to the workflow (check `argo get` output)
  2. If the workflow is archived/offloaded, ensure hydration/DB access works on the server
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at server/artifacts/artifact_server.go:681 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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