argoproj/argo-workflows · error
failed to load input artifacts from plugin %q: %w
Error message
failed to load input artifacts from plugin %q: %w
What it means
In runSupervisorPreMain's errgroup, each artifact plugin gets its own goroutine calling LoadArtifactsFromPlugin; failures are wrapped as "failed to load input artifacts from plugin %q" with the plugin name. Plugin-based artifact loading (artifact plugins handle fetch themselves) failing means the named plugin sidecar/service did not deliver the artifact, and the errgroup aborts pre-main.
Source
Thrown at cmd/argoexec/commands/supervisor.go:160
func runSupervisorPreMain(ctx context.Context, stages preMainStages, pluginNames []wfv1.ArtifactPluginName) error {
if err := stages.WriteTemplate(); err != nil {
return fmt.Errorf("failed to write template: %w", err)
}
if err := stages.StageFiles(ctx); err != nil {
return fmt.Errorf("failed to stage files: %w", err)
}
g, gctx := errgroup.WithContext(ctx)
g.Go(func() error {
if err := stages.LoadArtifactsWithoutPlugins(gctx); err != nil {
return fmt.Errorf("failed to load non-plugin input artifacts: %w", err)
}
return nil
})
for _, name := range pluginNames {
g.Go(func() error {
if err := stages.LoadArtifactsFromPlugin(gctx, name); err != nil {
return fmt.Errorf("failed to load input artifacts from plugin %q: %w", name, err)
}
return nil
})
}
return g.Wait()
}
// inputArtifactPluginNames reads the controller-supplied list of input
// artifact plugin names from the supervisor's environment.
func inputArtifactPluginNames() []wfv1.ArtifactPluginName {
raw := common.SplitPluginNames(os.Getenv(common.EnvVarInputArtifactPluginNames))
names := make([]wfv1.ArtifactPluginName, 0, len(raw))
for _, p := range raw {
names = append(names, wfv1.ArtifactPluginName(p))
}
return names
}
View on GitHub (pinned to 35bff19146)
Solutions
- Check the named plugin in the error for container crash/logs in the same pod
- Verify the plugin is configured and discoverable by argoexec (mount/env wiring in the pod spec)
- Confirm the plugin name in the Workflow matches the registered plugin name
- Restart/redeploy the plugin sidecar and retry the workflow node
Defensive patterns
Strategy: fallback
Validate before calling
// verify plugin registration before submit:
// argo executor-plugin build / verify plugin is mounted and named correctly
// kubectl get pod <pod> -o jsonpath='{.containers[*].name}' # plugin sidecar present? Try / catch
// errgroup already aggregates: match by plugin name from the message
if err := runSupervisorPreMain(ctx, stages, pluginNames); err != nil {
if strings.Contains(err.Error(), "failed to load input artifacts from plugin") {
// fall back to non-plugin loading path or restart the plugin sidecar
}
} Prevention
- Health-check plugin sidecars before artifact loading begins
- Keep plugin names in the Workflow exactly matching registered names
- Pin plugin and executor versions to compatible releases
- Set resource requests on plugin containers to avoid OOM kills
When it happens
Trigger: supervisorPreMain's per-plugin errgroup goroutine: LoadArtifactsFromPlugin(gctx, name) fails — the plugin container isn't running, its socket/service is unreachable, or the plugin reported an error for the artifact.
Common situations: Artifact plugin sidecar crashed or OOMed; plugin name typo in the Workflow's artifact plugin configuration; plugin not registered in the executor's plugin discovery (env var / volume mount missing); version mismatch between plugin and executor.
Related errors
- failed to load non-plugin input artifacts: %w
- %w
- %w
- failed to write template: %w
- failed to stage files: %w
AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03).
Data as JSON: /api/errors/68c54e9f5e601e69.
Report an issue: GitHub.