private void RetryRecurringJob( IStorageConnection connection, string recurringJobId, RecurringJobEntity recurringJob, Exception error) { IReadOnlyDictionary <string, string> changedFields; DateTime?nextExecution; var errorString = error.ToStringWithOriginalStackTrace(States.FailedState.MaxLinesInExceptionDetails); if (recurringJob.RetryAttempt < MaxRetryAttemptCount) { var delay = _pollingDelay > TimeSpan.Zero ? _pollingDelay : TimeSpan.FromMinutes(1); _logger.WarnException( $"Recurring job '{recurringJobId}' can't be scheduled due to an error and will be retried in {delay}.", error); recurringJob.ScheduleRetry(delay, errorString, out changedFields, out nextExecution); } else { _logger.ErrorException( $"Recurring job '{recurringJobId}' can't be scheduled due to an error and will be disabled.", error); recurringJob.Disable(errorString, out changedFields, out nextExecution); } using (var transaction = connection.CreateWriteTransaction()) { transaction.UpdateRecurringJob(recurringJob, changedFields, nextExecution, _logger); transaction.Commit(); } }