class CatchUpChannelPool {

    CHANNEL acquire( AdvertisedSocketAddress catchUpAddress ) throws Exception
    {
        CHANNEL channel = getIdleChannel( catchUpAddress );

        if ( channel == null )
        {
            channel = factory.apply( catchUpAddress );
            try
            {
                channel.connect();
                assertActive( channel, catchUpAddress );
            }
            catch ( Exception e )
            {
                channel.close();
                throw e;
            }
        }

        addActiveChannel( channel );

        return channel;
    }

      CatchUpChannelPool( Function<AdvertisedSocketAddress,CHANNEL> factory );

}