Class MaxConnectionSemaphore

    • Field Detail

      • freeChannels

        protected final Semaphore freeChannels
      • tooManyConnections

        protected final IOException tooManyConnections
      • acquireTimeout

        protected final int acquireTimeout
    • Method Detail

      • acquireChannelLock

        public void acquireChannelLock​(Object partitionKey,
                                       boolean nonBlocking)
                                throws IOException
        Description copied from interface: ConnectionSemaphore
        Acquires a connection permit for partitionKey, optionally without blocking.

        When nonBlocking is true a permit must be taken without waiting — the too-many-connections exception is thrown immediately if none is free. This is used when the caller runs on a Netty event-loop thread (a redirect / 401 / 407 / retry replay re-enters the send path on the event loop), where waiting for the configured acquire timeout would freeze the loop and stall every other connection it serves. When false this behaves exactly like ConnectionSemaphore.acquireChannelLock(Object).

        The default implementation ignores the hint and delegates to the blocking ConnectionSemaphore.acquireChannelLock(Object), preserving the behaviour of custom implementations; the built-in limiters override it to honour nonBlocking.

        Specified by:
        acquireChannelLock in interface ConnectionSemaphore
        Parameters:
        partitionKey - the per-host partition key the permit is scoped to
        nonBlocking - true to fail fast instead of waiting for a permit
        Throws:
        IOException - if no permit could be acquired