in gremlin-client/src/main/java/org/apache/tinkerpop/gremlin/driver/EndpointClientCollection.java [96:147]
Connection chooseConnection(RequestMessage msg, ChooseEndpointStrategy strategy) throws TimeoutException {
UUID traceId = msg.getRequestId();
long startMillis = System.currentTimeMillis();
EndpointClient endpointClient = strategy.choose(this);
String address = endpointClient.endpoint().getAddress();
if (!endpointClient.isAvailable()) {
logger.debug("No connections available for {}", address);
submitMetrics(() -> connectionMetrics.unavailable(address, startMillis));
return null;
}
try {
Connection connection = endpointClient.client().chooseConnection(msg);
if (connection.isClosing()) {
logger.debug("Connection is closing: {}", address);
submitMetrics(() -> connectionMetrics.closing(address, startMillis));
return null;
}
if (connection.isDead()) {
logger.debug("Connection is dead: {}", address);
submitMetrics(() -> connectionMetrics.dead(address, startMillis));
return null;
}
submitMetrics(() -> {
try {
connectionMetrics.succeeded(address, startMillis);
requestMetrics.registerAddressForTraceId(traceId, address);
} catch (Exception e) {
logger.error("Error while submitting metrics", e);
}
});
return connection;
} catch (NullPointerException e) {
logger.debug("NullPointerException: {}", address, e);
submitMetrics(() -> connectionMetrics.npe(address, startMillis));
return null;
} catch (NoHostAvailableException e) {
logger.debug("No connection available: {}", address, e);
submitMetrics(() -> connectionMetrics.nha(address, startMillis));
return null;
}
}