private bool WriteAttempt(TekReleaseWorkflowStateEntity item)
        {
            if (++_AttemptCount > AttemptCountMax)
            {
                _Logger.WriteMaximumCreateAttemptsReached();
                throw new InvalidOperationException("Maximum create attempts reached.");
            }

            if (_AttemptCount > 1)
            {
                _Logger.WriteDuplicatesFound(_AttemptCount);
            }


            item.LabConfirmationId = _LabConfirmationIdService.Next();
            item.BucketId          = _NumberGenerator.NextByteArray(_WorkflowConfig.BucketIdLength);
            item.ConfirmationKey   = _NumberGenerator.NextByteArray(_WorkflowConfig.ConfirmationKeyLength);

            try
            {
                _WorkflowDbContext.SaveAndCommit();
                _Logger.WriteCommitted();
                return(true);
            }
            catch (DbUpdateException ex)
            {
                _WorkflowDbContext.Remove(item);
                if (CanRetry(ex))
                {
                    return(false);
                }

                throw;
            }
        }
Esempio n. 2
0
        private bool TryGenerateRemainingFieldsAndWriteToDb(TekReleaseWorkflowStateEntity item)
        {
            if (++_AttemptCount > AttemptCountMax)
            {
                _logger.WriteMaximumCreateAttemptsReached();
                throw new InvalidOperationException("Maximum create attempts reached.");
            }

            if (_AttemptCount > 1)
            {
                _logger.WriteDuplicatesFound(_AttemptCount);
            }

            item.GGDKey          = _luhnModNGenerator.Next(_luhnModNConfig.ValueLength);
            item.BucketId        = _numberGenerator.NextByteArray(UniversalConstants.BucketIdByteCount);
            item.ConfirmationKey = _numberGenerator.NextByteArray(UniversalConstants.ConfirmationKeyByteCount);

            try
            {
                _workflowDbContext.SaveAndCommit();
                _logger.WriteCommitted();
                return(true);
            }
            catch (DbUpdateException ex)
            {
                _workflowDbContext.Database.CurrentTransaction.RollbackAsync();
                _workflowDbContext.Remove(item);

                if (CanRetry(ex))
                {
                    return(false);
                }

                throw;
            }
        }