Пример #1
0
        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();
            }
        }