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;
}
}
}
};
}