conductor-oss/conductor · error · RuntimeException

Retries completed. Cannot open

Error message

Retries completed. Cannot open <connType> channel on <addresses>

What it means

getOrCreateChannel caught IOException from createChannel, retrySettings is non-null, but retry.continueOrPropogate(e, retryIndex) threw, meaning the retry budget was exhausted while createChannel kept failing with IOException. The original IOException is wrapped as the cause.

Solutions

  1. Verify the connection is actually recoverable within the retry window (broker up, network stable).
  2. Check that channel_max / maxChannelCount is not permanently exceeded.
  3. Raise the retry budget if the outage is legitimately longer than the window.
  4. Add a circuit breaker upstream to fail fast on a sustained channel failure.

Example fix

# before: channel retries exhaust on a short window
conductor.amqp.retry.limit=3

# after: give channel recreation room to outlast a broker blip
conductor.amqp.retry.limit=8
Defensive patterns

Strategy: retry

Try / catch

// Channel retries already exhausted; hard failure
try {
    amqpConnection.getOrCreateChannel(type, name);
} catch (RuntimeException e) {
    LOGGER.error("channel retries exhausted: {}", e.getMessage(), e);
    throw e;
}

Prevention

When it happens

Trigger: createChannel throws IOException on every retry attempt until the AMQPRetryPattern limit/duration is reached, then continueOrPropogate raises and the retries-completed message is thrown.

Common situations: The connection is persistently closed (broker down for the whole window) so createChannel can never succeed; a non-transient channel error such as exceeding channel_max on every attempt.

Related errors


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

Appendix: source

Thrown at amqp/src/main/java/com/netflix/conductor/contribs/queue/amqp/AMQPConnection.java:243

                                    cause);
                        });
                return locChn;
            } catch (final IOException e) {
                AMQPRetryPattern retry = retrySettings;
                if (retry == null) {
                    throw new RuntimeException(
                            "Cannot open "
                                    + connType
                                    + " channel on "
                                    + Arrays.stream(addresses)
                                            .map(address -> address.toString())
                                            .collect(Collectors.joining(",")),
                            e);
                }
                try {
                    retry.continueOrPropogate(e, retryIndex);
                } catch (Exception ex) {
                    throw new RuntimeException(
                            "Retries completed. Cannot open "
                                    + connType
                                    + " channel on "
                                    + Arrays.stream(addresses)
                                            .map(address -> address.toString())
                                            .collect(Collectors.joining(",")),
                            e);
                }
                retryIndex++;
            } catch (final Exception e) {
                AMQPRetryPattern retry = retrySettings;
                if (retry == null) {
                    throw new RuntimeException(
                            "Cannot open "
                                    + connType
                                    + " channel on "
                                    + Arrays.stream(addresses)
                                            .map(address -> address.toString())

View on GitHub (pinned to cf7c3e4a8a)