For every withRetries() call, we are creating a new client on line 166 above, and then immediately closing it if clientHolder already has a connection.  Isn't creating a client expensive - i.e. does it open up a socket?