Code review comment: Right, in the case of more than one session error, if we see multiple entries of the first log and at least one of the second log entries, then it's good.   It looks like one of the session errors resulting in the processor restart may cancel the merge operator, which could, in turn, cancel some  enqueued errors to bounded-pool that are yet-to-run; this is why I said at least one-second log entry (statement is based on code scanning, I didn't try to simulate it. Something to double check in future when we investigate the effect of handling amp-error in _RetryWhen_ level vs Processor level, this [thread](https://github.com/Azure/azure-sdk-for-java/pull/33386#discussion_r1100499816))

Code under review:
Mono<ServiceBusReceiveLink> getActiveLink() {
        if (this.receiveLink != null) {
            return Mono.just(this.receiveLink);
        }
        return Mono.defer(() -> createSessionReceiveLink()
            .flatMap(link -> link.getEndpointStates()
                .filter(e -> e == AmqpEndpointState.ACTIVE)
                .next()
                
                
                
                .switchIfEmpty(Mono.error(() ->
                    new AmqpException(true, "Session receive link completed without being active", null)))
                .timeout(operationTimeout)
                .then(Mono.just(link))))
            .retryWhen(Retry.from(retrySignals -> retrySignals.flatMap(signal -> {
                final Throwable failure = signal.failure();
                LOGGER.atInfo()
                    .addKeyValue(ENTITY_PATH_KEY, entityPath)
                    .addKeyValue("attempt", signal.totalRetriesInARow())
                    .log("Error occurred while getting unnamed session.", failure);

                if (isDisposed.get()) {
                    return Mono.<Long>error(new AmqpException(false, "SessionManager is already disposed.", failure,
                        getErrorContext()));
                } else if (failure instanceof TimeoutException) {
                    return Mono.delay(SLEEP_DURATION_ON_ACCEPT_SESSION_EXCEPTION);
                } else if (failure instanceof AmqpException
                    && ((AmqpException) failure).getErrorCondition() == AmqpErrorCondition.TIMEOUT_ERROR) {
                    return Mono.delay(SLEEP_DURATION_ON_ACCEPT_SESSION_EXCEPTION);
                } else {
                    
                    
                    
                    return Mono.<Long>error(failure).publishOn(Schedulers.boundedElastic());
                }
            })));
    }

Line commented on: return Mono.<Long>error(failure).publishOn(Schedulers.boundedElastic());

Revised code:
Mono<ServiceBusReceiveLink> getActiveLink() {
        if (this.receiveLink != null) {
            return Mono.just(this.receiveLink);
        }
        return Mono.defer(() -> createSessionReceiveLink()
            .flatMap(link -> link.getEndpointStates()
                .filter(e -> e == AmqpEndpointState.ACTIVE)
                .next()
                
                
                
                .switchIfEmpty(Mono.error(() ->
                    new AmqpException(true, "Session receive link completed without being active", null)))
                .timeout(operationTimeout)
                .then(Mono.just(link))))
            .retryWhen(Retry.from(retrySignals -> retrySignals.flatMap(signal -> {
                final Throwable failure = signal.failure();
                LOGGER.atInfo()
                    .addKeyValue(ENTITY_PATH_KEY, entityPath)
                    .addKeyValue("attempt", signal.totalRetriesInARow())
                    .log("Error occurred while getting unnamed session.", failure);

                if (isDisposed.get()) {
                    return Mono.<Long>error(new AmqpException(false, "SessionManager is already disposed.", failure,
                        getErrorContext()));
                } else if (failure instanceof TimeoutException) {
                    return Mono.delay(SLEEP_DURATION_ON_ACCEPT_SESSION_EXCEPTION);
                } else if (failure instanceof AmqpException
                    && ((AmqpException) failure).getErrorCondition() == AmqpErrorCondition.TIMEOUT_ERROR) {
                    return Mono.delay(SLEEP_DURATION_ON_ACCEPT_SESSION_EXCEPTION);
                } else {
                    final long id = System.nanoTime();
                    LOGGER.atInfo()
                            .addKeyValue(TRACKING_ID_KEY, id)
                            .log("Unable to acquire new session.", failure);
                    
                    
                    
                    return Mono.<Long>error(failure)
                            .publishOn(Schedulers.boundedElastic())
                            .doOnError(e -> LOGGER.atInfo()
                                    .addKeyValue(TRACKING_ID_KEY, id)
                                    .log("Emitting the error signal received for session acquire attempt.", e)
                    );
                }
            })));
    }