Class CombinedConnectionSemaphore
- java.lang.Object
-
- org.asynchttpclient.netty.channel.PerHostConnectionSemaphore
-
- org.asynchttpclient.netty.channel.CombinedConnectionSemaphore
-
- All Implemented Interfaces:
ConnectionSemaphore
public class CombinedConnectionSemaphore extends PerHostConnectionSemaphore
A combinedConnectionSemaphorewith two limits - a global limit and a per-host limit
-
-
Field Summary
Fields Modifier and Type Field Description protected MaxConnectionSemaphoreglobalMaxConnectionSemaphore-
Fields inherited from class org.asynchttpclient.netty.channel.PerHostConnectionSemaphore
acquireTimeout, freeChannelsPerHost, maxConnectionsPerHost, tooManyConnectionsPerHost
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidacquireChannelLock(Object partitionKey)voidacquireChannelLock(Object partitionKey, boolean nonBlocking)Acquires a connection permit forpartitionKey, optionally without blocking.protected longacquireGlobal(Object partitionKey)protected longacquireGlobalTimed(Object partitionKey)voidreleaseChannelLock(Object partitionKey)protected voidreleaseGlobal(Object partitionKey)-
Methods inherited from class org.asynchttpclient.netty.channel.PerHostConnectionSemaphore
getFreeConnectionsForHost
-
-
-
-
Field Detail
-
globalMaxConnectionSemaphore
protected final MaxConnectionSemaphore globalMaxConnectionSemaphore
-
-
Method Detail
-
acquireChannelLock
public void acquireChannelLock(Object partitionKey) throws IOException
- Specified by:
acquireChannelLockin interfaceConnectionSemaphore- Overrides:
acquireChannelLockin classPerHostConnectionSemaphore- Throws:
IOException
-
acquireChannelLock
public void acquireChannelLock(Object partitionKey, boolean nonBlocking) throws IOException
Description copied from interface:ConnectionSemaphoreAcquires a connection permit forpartitionKey, optionally without blocking.When
nonBlockingistruea 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. Whenfalsethis behaves exactly likeConnectionSemaphore.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 honournonBlocking.- Specified by:
acquireChannelLockin interfaceConnectionSemaphore- Overrides:
acquireChannelLockin classPerHostConnectionSemaphore- Parameters:
partitionKey- the per-host partition key the permit is scoped tononBlocking-trueto fail fast instead of waiting for a permit- Throws:
IOException- if no permit could be acquired
-
releaseGlobal
protected void releaseGlobal(Object partitionKey)
-
acquireGlobal
protected long acquireGlobal(Object partitionKey) throws IOException
- Throws:
IOException
-
acquireGlobalTimed
protected long acquireGlobalTimed(Object partitionKey) throws IOException
- Throws:
IOException
-
releaseChannelLock
public void releaseChannelLock(Object partitionKey)
- Specified by:
releaseChannelLockin interfaceConnectionSemaphore- Overrides:
releaseChannelLockin classPerHostConnectionSemaphore
-
-