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

  1. Set 'workflow.external.payload.storage.connectionString' in your Conductor config to a valid Azure Storage connection string.
  2. Alternatively set 'workflow.external.payload.storage.endpoint' (plus sasToken if using SAS auth) to the blob service endpoint URL.
  3. Double-check the property names for typos and confirm the active Spring profile actually loads them.
  4. 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

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


AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14). Data as JSON: /api/errors/8129842099868966. Report an issue: GitHub.