public Retrier()

in java/commons/src/main/java/com/epam/deltix/data/connectors/commons/Retrier.java [16:65]


    public Retrier(final RetriableFactory<C> factory, final int retryPauseMillis, final Logger logger) {
        this.factory = factory;
        this.logger = logger;

        retrier = new Thread(Retrier.class.getSimpleName()) {

            @Override
            public void run() {
                while (true) {
                    C retriable = null;

                    try {
                        final AtomicReference<Throwable> errorRef = new AtomicReference<>();
                        final CountDownLatch retryLatch = new CountDownLatch(1);

                        synchronized (Retrier.this) {
                            if (closed) {
                                break;
                            }

                            retriable = factory.create(error -> {
                                errorRef.set(error);
                                retryLatch.countDown();
                            });
                        }

                        retryLatch.await();

                        final Throwable error = errorRef.get();
                        if (error != null) {
                            throw error;
                        }
                    } catch (final Throwable t) {
                        if (closed) {
                            break;
                        }
                        logger.warning(() -> "An error happened: " + t.getLocalizedMessage(), t);
                    } finally {
                        Util.closeQuiet(retriable);
                    }

                    try {
                        sleep(retryPauseMillis);
                    } catch (final InterruptedException e) {
                        break;
                    }
                }
            }
        };
    }