ClickHouseResponse sendOnce(ClickHouseRequest<?> sealedRequest) {
            try {
                return getClient().execute(sealedRequest).get(sealedRequest.getConfig().getSocketTimeout(),
                        TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                throw new CancellationException("Execution was interrupted");
            } catch (ExecutionException | TimeoutException e) {
                throw new CompletionException(e.getCause());
            }
        }
Repeats sending same request until success, timed out or running into a
different error.

@param sealedRequest non-null sealed request
@param exception     non-null exception to start with
@param timeout       timeout in milliseconds, zero or negative numbers means
                     no repeat
@return non-null response
@throws CompletionException when error occurred or timed out
clickhouse-client/src/main/java/com/clickhouse/client/ClickHouseClientBuilder.java