TbSqlBlockingQueue failover improvement
This commit is contained in:
parent
d08f0467df
commit
4c8cf69632
@ -54,7 +54,7 @@ public class TbSqlBlockingQueue<E> implements TbSqlQueue<E> {
|
||||
String logName = params.getLogName();
|
||||
int batchSize = params.getBatchSize();
|
||||
long maxDelay = params.getMaxDelay();
|
||||
List<TbSqlQueueElement<E>> entities = new ArrayList<>(batchSize);
|
||||
final List<TbSqlQueueElement<E>> entities = new ArrayList<>(batchSize);
|
||||
while (!Thread.interrupted()) {
|
||||
try {
|
||||
long currentTs = System.currentTimeMillis();
|
||||
@ -83,19 +83,23 @@ public class TbSqlBlockingQueue<E> implements TbSqlQueue<E> {
|
||||
Thread.sleep(remainingDelay);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
} catch (Throwable t) {
|
||||
log.error("[{}] Failed to save {} entities", logName, entities.size(), t);
|
||||
try {
|
||||
stats.incrementFailed(entities.size());
|
||||
entities.forEach(entityFutureWrapper -> entityFutureWrapper.getFuture().setException(e));
|
||||
if (e instanceof InterruptedException) {
|
||||
entities.forEach(entityFutureWrapper -> entityFutureWrapper.getFuture().setException(t));
|
||||
} catch (Throwable th) {
|
||||
log.error("[{}] Failed to set future exception", logName, th);
|
||||
}
|
||||
if (t instanceof InterruptedException) {
|
||||
log.info("[{}] Queue polling was interrupted", logName);
|
||||
break;
|
||||
} else {
|
||||
log.error("[{}] Failed to save {} entities", logName, entities.size(), e);
|
||||
}
|
||||
} finally {
|
||||
entities.clear();
|
||||
}
|
||||
}
|
||||
log.info("[{}] Queue polling completed", logName);
|
||||
});
|
||||
|
||||
logExecutor.scheduleAtFixedRate(() -> {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user