conductor-oss/conductor · critical · NonTransientException
Missing property for connectionString OR endpoint
Error message
Missing property for connectionString OR endpoint
What it means
Thrown by the AzureBlobPayloadStorage constructor when neither a connectionString nor an endpoint is supplied in the configuration. Conductor's Azure blob external payload storage needs at least one of these two properties to build a BlobContainerClient. The NonTransientException signals a permanent configuration error that retrying will not fix.
Source
Thrown at azureblob-storage/src/main/java/com/netflix/conductor/azureblob/storage/AzureBlobPayloadStorage.java:92
String endpoint = properties.getEndpoint();
String sasToken = properties.getSasToken();
BlobContainerClientBuilder blobContainerClientBuilder = new BlobContainerClientBuilder();
if (connectionString != null) {
blobContainerClientBuilder.connectionString(connectionString);
sasTokenCredential = null;
} else if (endpoint != null) {
blobContainerClientBuilder.endpoint(endpoint);
if (sasToken != null) {
sasTokenCredential = SasTokenCredential.fromSasTokenString(sasToken);
blobContainerClientBuilder.sasToken(sasTokenCredential.getSasToken());
} else {
sasTokenCredential = null;
}
} else {
String msg = "Missing property for connectionString OR endpoint";
LOGGER.error(msg);
throw new NonTransientException(msg);
}
blobContainerClient = blobContainerClientBuilder.containerName(containerName).buildClient();
}
/**
* @param operation the type of {@link Operation} to be performed
* @param payloadType the {@link PayloadType} that is being accessed
* @return a {@link ExternalStorageLocation} object which contains the pre-signed URL and the
* azure blob name for the json payload
*/
@Override
public ExternalStorageLocation getLocation(
Operation operation, PayloadType payloadType, String path) {
try {
ExternalStorageLocation externalStorageLocation = new ExternalStorageLocation();
String objectKey;
if (StringUtils.isNotBlank(path)) {View on GitHub (pinned to cf7c3e4a8a)
Solutions
- Set 'workflow.external.payload.storage.connectionString' in your Conductor config to a valid Azure Storage connection string.
- Alternatively set 'workflow.external.payload.storage.endpoint' (plus sasToken if using SAS auth) to the blob service endpoint URL.
- Double-check the property names for typos and confirm the active Spring profile actually loads them.
- Verify the value is present at runtime by logging the resolved AzureBlobConfiguration values on startup.
Example fix
// before # application.properties workflow.external.payload.storage.type=azure # after workflow.external.payload.storage.type=azure workflow.external.payload.storage.connectionString=DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net
Defensive patterns
Strategy: validation
Validate before calling
// Fail fast at startup if Azure payload storage is enabled without credentials
boolean azureEnabled = "azure".equalsIgnoreCase(cfg.getStorageType());
if (azureEnabled && (isBlank(cfg.getConnectionString()) && isBlank(cfg.getEndpoint()))) {
throw new IllegalStateException(
"AzureBlobPayloadStorage requires connectionString OR endpoint");
} Prevention
- Validate external payload storage config in a @PostConstruct bean so misconfiguration surfaces at boot, not on first payload use.
- Keep the Azure storage properties in a dedicated profile and verify it loads in CI.
- Document both auth paths (connectionString vs endpoint+SAS) clearly so operators supply one.
When it happens
Trigger: Constructing AzureBlobPayloadStorage with both the 'connectionString' and 'endpoint' config properties null/empty. Happens when conductor.external.payload.storage.* is set to AZURE but the matching connection string or endpoint property is omitted from application properties.
Common situations: Switching the external payload storage type to 'azure' without adding 'workflow.external.payload.storage.connectionString' or 'workflow.external.payload.storage.endpoint'. Mis-spelled property keys. Loading a profile that does not include the Azure storage properties (e.g. wrong Spring profile in a container).
Related errors
- Error communicating with Azure
- conductor.app.sweeper-thread-count must be greater than 0.
- Cannot set event processor thread count to <=0. To disable e
- 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/8129842099868966.
Report an issue: GitHub.