Skip to content

Setting pendingAcquireMaxCount and pendingAcquireTimeout to zero in ConnectionProvider #3986

@Martin7-1

Description

@Martin7-1

I'm wondering if reactor-netty can support setting pendingAcquireMaxCount and pendingAcquireTimeout in ConnectionProvider, in order to fail fast if no connection can be acquired.

Motivation

My motivation is that I can't estimate a proper maxConnections, and I don't want requests wait for connection, so I implement a HybridConnectionProvider to composite PooledConnectionProvider and NewConnectionProvider:

  • If the pending queue in PooledConnectionProvider is full (which I want set it to 0, and throw PoolAcquirePendingLimitException immediately), I can new a connection via NewConnectionProvider.
  • If not, use PooledConnectionProvider as normal.

Desired solution

My implement like:

    public Mono<? extends Connection> acquire(@NonNull TransportConfig config, @NonNull ConnectionObserver connectionObserver, Supplier<? extends SocketAddress> remoteAddress, AddressResolverGroup<?> resolverGroup) {
        Mono<Connection> poolAcquire = (Mono<Connection>) pooledConnectionProvider.acquire(config, connectionObserver, remoteAddress, resolverGroup);

        return poolAcquire
                .doOnError(throwable -> log.info("Encounter exception in pooledConnectionProvider, create temp connection!", throwable))
                .onErrorResume(PoolAcquirePendingLimitException.class, __ -> newConnection(config, connectionObserver, remoteAddress, resolverGroup))
                .onErrorResume(PoolAcquireTimeoutException.class, __ -> newConnection(config, connectionObserver, remoteAddress, resolverGroup));
    }

I hope the ConnectionProvider can:

        return ConnectionProvider.builder("webclient-pool")
                .pendingAcquireMaxCount(0)
                .pendingAcquireTimeout(Duration.ZERO)
                .build();

Considered alternatives

No

Additional context

No

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions