Pool slot is needed to add a connection to the pool. Poolslots have
a one to one mapping to connections inside the pool, and are used
to track the ‘total’ connections inside the pool
ConnID is used to identify a connection in a connection pool. These IDs
are not unique and multiple connections can have the same ID. IDs are used
to filter which connections can be used for a specific Request in a way that
is independent of what a Request is.
[PoolStorage] implements the storage part of a connection pool. This storage
also decides which connection it returns for a given ID or when the caller asks to
remove one, this results in the storage deciding which mode we use for connection
reuse and dropping (eg FIFO for reuse and LRU for dropping conn when pool is full)
ReqToConnID is used to convert a Request to a connection ID. These IDs
are not unique and multiple connections can have the same ID. IDs are used
to filter which connections can be used for a specific Request in a way that
is independent of what a Request is.