conductor-oss/conductor · error · NonTransientException
Error generating presigned URL
Error message
Error generating presigned URL
What it means
Thrown as NonTransientException by getLocation's generic catch (Exception) when presigned-URL generation fails with something that is NOT an SdkException. Because it is not an SDK/network error, conductor treats it as a configuration/programming problem that retrying will not fix. The message is generic, so the chained exception 'e' holds the real cause.
Source
Thrown at awss3-storage/src/main/java/com/netflix/conductor/s3/storage/S3PayloadStorage.java:137
.getObjectRequest(getObjectRequest)
.build();
presignedUrl = s3Presigner.presignGetObject(presignRequest).url().toString();
}
externalStorageLocation.setUri(presignedUrl);
return externalStorageLocation;
} catch (SdkException e) {
String msg =
String.format(
"Error communicating with S3 - operation:%s, payloadType: %s, path: %s",
operation, payloadType, path);
LOGGER.error(msg, e);
throw new TransientException(msg, e);
} catch (Exception e) {
String msg = "Error generating presigned URL";
LOGGER.error(msg, e);
throw new NonTransientException(msg, e);
}
}
/**
* Uploads the payload to the given s3 object key. It is expected that the caller retrieves the
* object key using {@link #getLocation(Operation, PayloadType, String)} before making this
* call.
*
* @param path the s3 key of the object to be uploaded
* @param payload an {@link InputStream} containing the json payload which is to be uploaded
* @param payloadSize the size of the json payload in bytes
*/
@Override
public void upload(String path, InputStream payload, long payloadSize) {
try {
PutObjectRequest request =
PutObjectRequest.builder()
.bucket(bucketName)View on GitHub (pinned to cf7c3e4a8a)
Solutions
- Read the chained exception 'e' — it names the real cause (often NPE on bucket/key).
- Ensure conductor.payload-storage.s3.bucket (or equivalent) is set to a non-empty value.
- Validate the path argument and signatureDuration before calling getLocation.
- Do not retry — NonTransientException indicates retrying will keep failing until config changes.
Example fix
// before — bucket name unset, NPE thrown, wrapped as NonTransientException // after conductor.payload-storage.s3.bucket=my-payload-bucket conductor.payload-storage.s3.region=us-east-1
Defensive patterns
Strategy: validation
Validate before calling
import org.apache.commons.lang3.StringUtils;
if (StringUtils.isBlank(bucketName)) {
throw new IllegalStateException("conductor.payload-storage.s3.bucket is not configured");
}
if (StringUtils.isBlank(path)) {
throw new IllegalArgumentException("path is required for getLocation");
}
if (signatureDuration == null || signatureDuration.isNegative()) {
throw new IllegalStateException("signatureDuration is invalid: " + signatureDuration);
} Try / catch
try {
return storage.getLocation(operation, payloadType, path);
} catch (NonTransientException e) {
// Read chained cause (often NPE on bucket/key) — fix config, do not retry
log.error("Non-transient S3 presign failure: {}", e.getCause(), e);
throw e;
} Prevention
- Always set the S3 bucket and region properties.
- Validate path and signatureDuration before calling getLocation.
- Do not retry NonTransientException — fix the underlying config.
When it happens
Trigger: NullPointerException or IllegalStateException during request building (e.g. null bucket name, null objectKey), an invalid signatureDuration, or a misconfigured S3Presigner. Falls through the SdkException catch into the generic Exception catch.
Common situations: bucketName property unset (null) so the builder throws; signatureDuration misconfigured; an empty path producing an invalid key; S3Presigner not initialized correctly.
Related errors
- Error communicating with S3 - operation:%s, payloadType: %s,
- Error uploading to S3 - path:%s, payloadSize: %d
- Error downloading from S3 - path:%s
- Skill registry is not available
- llmProvider not specified: {name}
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/56eb904bffebe947.
Report an issue: GitHub.