Summary
POST /api/workflow accepts the externalInputPayloadStoragePath field unconditionally
- No validation that external payload storage is actually configured.
- On a server with no storage backend, start workflow fails with an internal-error 500 where an upfront 400 with a clear message is more appropriate
Environment
- conductor-oss/conductor v3.32.1, standalone container (
conductoross/conductor:3.32.1)
- No external payload storage configured
conductor.external-payload-storage.type is unset
Steps to reproduce
Register any minimal workflow:
curl -X PUT http://localhost:8080/api/metadata/workflow \
-H 'Content-Type: application/json' \
-d '[{"name":"payload_path_repro","version":1,"schemaVersion":2,
"ownerEmail":"you@example.com","timeoutSeconds":0,
"tasks":[{"name":"echo","taskReferenceName":"echo_ref","type":"JSON_JQ_TRANSFORM",
"inputParameters":{"in":"${workflow.input}","queryExpression":"{got: .in}"}}]}]'
Start it with the storage-path field
curl -X POST http://localhost:8080/api/workflow \
-H 'Content-Type: application/json' \
-d '{"name":"payload_path_repro","version":1,
"externalInputPayloadStoragePath":"workflow/input/nonexistent.json"}'
Actual output
{"status":500,"message":"Unable to download payload from external storage path: workflow/input/nonexistent.json","instance":"f6c8fce328b5","retryable":false}
HTTP 500
Expected
A 400 rejection at the request instead of a server-side erro, something like external payload storage is not configured on this server.
Root cause
Proposed fix
Validate at the API boundary (or at least in startWorkflow)
Summary
POST /api/workflowaccepts theexternalInputPayloadStoragePathfield unconditionallyEnvironment
conductoross/conductor:3.32.1)conductor.external-payload-storage.typeis unsetSteps to reproduce
Register any minimal workflow:
Start it with the storage-path field
Actual output
Expected
A 400 rejection at the request instead of a server-side erro, something like
external payload storage is not configured on this server.Root cause
DummyPayloadStorage, whosedownload()returnsnull.ExternalPayloadStorageUtils.downloadPayloadand is wrapped asNonTransientException→ 500.Proposed fix
Validate at the API boundary (or at least in
startWorkflow)