{"record":{"id":"3b85be7925c60714","repo":"argoproj/argo-workflows","slug":"plugin-s-load-failed-w","errorCode":null,"errorMessage":"plugin %s load failed: %w","messagePattern":"plugin (.+?) load failed: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"workflow/artifacts/plugin/plugin.go","lineNumber":154,"sourceCode":"}\n\n// Close closes the gRPC connection\nfunc (d *Driver) Close() error {\n\tif d.conn != nil {\n\t\treturn d.conn.Close()\n\t}\n\treturn nil\n}\n\n// Load implements ArtifactDriver.Load by calling the plugin service\nfunc (d *Driver) Load(ctx context.Context, inputArtifact *wfv1.Artifact, path string) error {\n\tgrpcArtifact := convertToGRPC(inputArtifact)\n\tresp, err := d.client.Load(ctx, &artifact.LoadArtifactRequest{\n\t\tInputArtifact: grpcArtifact,\n\t\tPath:          path,\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"plugin %s load failed: %w\", d.pluginName, err)\n\t}\n\tif !resp.Success {\n\t\treturn fmt.Errorf(\"plugin %s load failed: %s\", d.pluginName, resp.Error)\n\t}\n\treturn nil\n}\n\n// OpenStream implements ArtifactDriver.OpenStream by calling the plugin service\nfunc (d *Driver) OpenStream(ctx context.Context, a *wfv1.Artifact) (io.ReadCloser, error) {\n\tgrpcArtifact := convertToGRPC(a)\n\tstream, err := d.client.OpenStream(ctx, &artifact.OpenStreamRequest{\n\t\tArtifact: grpcArtifact,\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"plugin %s open stream failed: %w\", d.pluginName, err)\n\t}\n\n\treader, writer := io.Pipe()","sourceCodeStart":136,"sourceCodeEnd":172,"githubUrl":"https://github.com/argoproj/argo-workflows/blob/35bff19146f5a6ada77468c431f2624bd577e373/workflow/artifacts/plugin/plugin.go#L136-L172","documentation":"Driver.Load calls the plugin's LoadArtifact RPC. This error wraps a transport/RPC-level failure (gRPC status error, connection dropped, context deadline) — the call itself failed rather than the plugin reporting a business-logic failure.","triggerScenarios":"The Load RPC returns a gRPC error: Unavailable (plugin restarted mid-workflow), DeadlineExceeded (ctx timeout during a large copy), Canceled (workflow/node cancelled), Unimplemented (plugin predates the Load RPC), or the connection broke mid-call.","commonSituations":"Plugin pod OOM-killed or restarted while an artifact was being loaded, network/context timeouts on large artifacts, plugin version older than the controller expecting a newer RPC surface.","solutions":["Check plugin pod stability (restarts, OOMKills) with kubectl get pod / describe","Use errors.Is / status.Code(err) on the wrapped error to branch: retry Unavailable/DeadlineExceeded with backoff, fail fast on Unimplemented","Increase the context/step timeout for large artifact loads","Upgrade the plugin to match the controller's artifact gRPC API version"],"exampleFix":"// before: treat any failure as fatal\nreturn d.Load(ctx, art, path)\n// after: retry transient gRPC failures\nerr := d.Load(ctx, art, path)\nif status.Code(err) == codes.Unavailable {\n    return retryWithBackoff(func() error { return d.Load(ctx, art, path) })\n}\nreturn err","handlingStrategy":"retry","validationCode":"// preflight the plugin before the artifact step\nresp, err := drv.ListObjects(ctx, artifactRef)\nif err != nil { return fmt.Errorf(\"plugin unreachable for artifact load: %w\", err) }","typeGuard":null,"tryCatchPattern":"err := drv.Load(ctx, art, path)\nif err != nil {\n    switch status.Code(err) {\n    case codes.Unavailable, codes.DeadlineExceeded, codes.Canceled:\n        return retryWithBackoff(3, func() error { return drv.Load(ctx, art, path) })\n    case codes.Unimplemented:\n        return fmt.Errorf(\"plugin too old for Load RPC: %w\", err)\n    default:\n        return err\n    }\n}","preventionTips":["Configure PodDisruptionBudgets/restart policies so plugins don't vanish mid-workflow","Give artifact steps generous deadlines relative to artifact size","Keep plugin and controller gRPC API versions in lockstep"],"tags":["grpc","rpc-error","artifact-load","plugin-driver"],"backgroundTag":"grpc-rpc-failed","analyzedSha":"35bff19146f5a6ada77468c431f2624bd577e373","analyzedAt":"2026-09-03T19:34:35.908Z","contentChangedAt":"2026-09-03T19:34:35.908Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}