1. isConnectionAlive() if connection is invalid/broken, avoid delay
caused by calls (and probably more exception) on connection to be
closed.
2. getConection() removed dead code. poolEntry is always null if
connectionBag.borrow() throws InterruptedException.
probably metricsTracker.recordBorrowTimeoutStats(startTime);
and metricsTracker.recordConnectionTimeout() are same/ should be
one call?