public void scheduleRetry(final QueueRetryException exception,
final QueueEvent originalNotificationEvent,
final DateTime originalEffectiveDate,
final UUID userToken,
final Long searchKey1,
final Long searchKey2,
final int retryNb) {
final DateTime effectiveDate = computeRetryDate(exception, originalEffectiveDate, retryNb);
if (effectiveDate == null) {
log.warn("Error processing event, NOT scheduling retry for event='{}', retryNb='{}'", originalNotificationEvent, retryNb, exception);
throw new RetryableInternalException(false);
}
log.warn("Error processing event, scheduling retry for event='{}', effectiveDate='{}', retryNb='{}'", originalNotificationEvent, effectiveDate, retryNb, exception);
try {
final NotificationEvent retryNotificationEvent = new RetryNotificationEvent(objectMapper.writeValueAsString(originalNotificationEvent), originalNotificationEvent.getClass(), originalEffectiveDate, retryNb);
retryNotificationQueue.recordFutureNotification(effectiveDate, retryNotificationEvent, userToken, searchKey1, searchKey2);
throw new RetryableInternalException(true);
} catch (final IOException e) {
log.error("Unable to schedule retry for event='{}', effectiveDate='{}'", originalNotificationEvent, effectiveDate, e);
throw new RetryableInternalException(false);
}
}