public async Task CompleteAsync()
        {
            ValidateBlockIsActive();
            await _uncommittedListSemaphore.WaitAsync().ConfigureAwait(false);

            try
            {
                await CommitUncommittedItemsAsync().ConfigureAwait(false);
            }
            finally
            {
                _uncommittedListSemaphore.Release();
            }

            var status = BlockExecutionStatus.Completed;

            if ((await GetItemsAsync(ItemStatus.Failed, ItemStatus.Pending).ConfigureAwait(false)).Any())
            {
                status = BlockExecutionStatus.Failed;
            }

            var request = new BlockExecutionChangeStatusRequest(new TaskId(_applicationName, _taskName),
                                                                _taskExecutionId,
                                                                BlockType.List,
                                                                BlockExecutionId,
                                                                status);

            Func <BlockExecutionChangeStatusRequest, Task> actionRequest = _listBlockRepository.ChangeStatusAsync;
            await RetryService.InvokeWithRetryAsync(actionRequest, request).ConfigureAwait(false);
        }
        private async Task ChangeStatusOfNumericRangeExecutionAsync(BlockExecutionChangeStatusRequest changeStatusRequest)
        {
            try
            {
                using (var connection = await CreateNewConnectionAsync(changeStatusRequest.TaskId).ConfigureAwait(false))
                {
                    var command = connection.CreateCommand();
                    command.CommandTimeout = ConnectionStore.Instance.GetConnection(changeStatusRequest.TaskId).QueryTimeoutSeconds;
                    command.CommandText    = GetNumericRangeUpdateQuery(changeStatusRequest.BlockExecutionStatus);
                    command.Parameters.Add("@BlockExecutionId", SqlDbType.BigInt).Value      = long.Parse(changeStatusRequest.BlockExecutionId);
                    command.Parameters.Add("@BlockExecutionStatus", SqlDbType.TinyInt).Value = (byte)changeStatusRequest.BlockExecutionStatus;
                    command.Parameters.Add("@ItemsCount", SqlDbType.Int).Value = changeStatusRequest.ItemsProcessed;
                    await command.ExecuteNonQueryAsync().ConfigureAwait(false);
                }
            }
            catch (SqlException sqlEx)
            {
                if (TransientErrorDetector.IsTransient(sqlEx))
                {
                    throw new TransientException("A transient exception has occurred", sqlEx);
                }

                throw;
            }
        }
Exemple #3
0
        public async Task StartAsync()
        {
            var request = new BlockExecutionChangeStatusRequest(new TaskId(_applicationName, _taskName),
                                                                _taskExecutionId,
                                                                BlockType.Object,
                                                                BlockExecutionId,
                                                                BlockExecutionStatus.Started);

            Func <BlockExecutionChangeStatusRequest, Task> actionRequest = _objectBlockRepository.ChangeStatusAsync;
            await RetryService.InvokeWithRetryAsync(actionRequest, request).ConfigureAwait(false);
        }
        protected async Task SetStatusAsFailedAsync()
        {
            var request = new BlockExecutionChangeStatusRequest(new TaskId(_applicationName, _taskName),
                                                                _taskExecutionId,
                                                                BlockType.List,
                                                                BlockExecutionId,
                                                                BlockExecutionStatus.Failed);

            Func <BlockExecutionChangeStatusRequest, Task> actionRequest = _listBlockRepository.ChangeStatusAsync;
            await RetryService.InvokeWithRetryAsync(actionRequest, request).ConfigureAwait(false);
        }
        public async Task FailedAsync()
        {
            var request = new BlockExecutionChangeStatusRequest(new TaskId(_applicationName, _taskName),
                                                                _taskExecutionId,
                                                                _block.RangeType,
                                                                BlockExecutionId,
                                                                BlockExecutionStatus.Failed);

            Func <BlockExecutionChangeStatusRequest, Task> actionRequest = _rangeBlockRepository.ChangeStatusAsync;
            await RetryService.InvokeWithRetryAsync(actionRequest, request).ConfigureAwait(false);
        }
        protected void SetStatusAsFailed()
        {
            var request = new BlockExecutionChangeStatusRequest(new TaskId(_applicationName, _taskName),
                                                                _taskExecutionId,
                                                                BlockType.List,
                                                                BlockExecutionId,
                                                                BlockExecutionStatus.Failed);

            Action <BlockExecutionChangeStatusRequest> actionRequest = _listBlockRepository.ChangeStatus;

            RetryService.InvokeWithRetry(actionRequest, request);
        }
Exemple #7
0
        public void Failed()
        {
            var request = new BlockExecutionChangeStatusRequest(new TaskId(_applicationName, _taskName),
                                                                _taskExecutionId,
                                                                _block.RangeType,
                                                                BlockExecutionId,
                                                                BlockExecutionStatus.Failed);

            Action <BlockExecutionChangeStatusRequest> actionRequest = _rangeBlockRepository.ChangeStatus;

            RetryService.InvokeWithRetry(actionRequest, request);
        }
Exemple #8
0
        public void Start()
        {
            var request = new BlockExecutionChangeStatusRequest(new TaskId(_applicationName, _taskName),
                                                                _taskExecutionId,
                                                                BlockType.Object,
                                                                BlockExecutionId,
                                                                BlockExecutionStatus.Started);

            Action <BlockExecutionChangeStatusRequest> actionRequest = _objectBlockRepository.ChangeStatus;

            RetryService.InvokeWithRetry(actionRequest, request);
        }
        public async Task CompleteAsync(int itemsProcessed)
        {
            var request = new BlockExecutionChangeStatusRequest(new TaskId(_applicationName, _taskName),
                                                                _taskExecutionId,
                                                                _block.RangeType,
                                                                BlockExecutionId,
                                                                BlockExecutionStatus.Completed);

            request.ItemsProcessed = itemsProcessed;

            Func <BlockExecutionChangeStatusRequest, Task> actionRequest = _rangeBlockRepository.ChangeStatusAsync;
            await RetryService.InvokeWithRetryAsync(actionRequest, request).ConfigureAwait(false);
        }
Exemple #10
0
        public void Complete(int itemsProcessed)
        {
            var request = new BlockExecutionChangeStatusRequest(new TaskId(_applicationName, _taskName),
                                                                _taskExecutionId,
                                                                _block.RangeType,
                                                                BlockExecutionId,
                                                                BlockExecutionStatus.Completed);

            request.ItemsProcessed = itemsProcessed;

            Action <BlockExecutionChangeStatusRequest> actionRequest = _rangeBlockRepository.ChangeStatus;

            RetryService.InvokeWithRetry(actionRequest, request);
        }
Exemple #11
0
        public void ChangeStatus(BlockExecutionChangeStatusRequest changeStatusRequest)
        {
            switch (changeStatusRequest.BlockType)
            {
            case BlockType.DateRange:
                ChangeStatusOfDateRangeExecution(changeStatusRequest);
                break;

            case BlockType.NumericRange:
                ChangeStatusOfNumericRangeExecution(changeStatusRequest);
                break;

            default:
                throw new NotSupportedException("This range type is not supported");
            }
        }
        public async Task ChangeStatusAsync(BlockExecutionChangeStatusRequest changeStatusRequest)
        {
            switch (changeStatusRequest.BlockType)
            {
            case BlockType.DateRange:
                await ChangeStatusOfDateRangeExecutionAsync(changeStatusRequest).ConfigureAwait(false);

                break;

            case BlockType.NumericRange:
                await ChangeStatusOfNumericRangeExecutionAsync(changeStatusRequest).ConfigureAwait(false);

                break;

            default:
                throw new NotSupportedException("This range type is not supported");
            }
        }
        public void Complete()
        {
            ValidateBlockIsActive();
            CommitUncommittedItems();

            var status = BlockExecutionStatus.Completed;

            if (GetItems(ItemStatus.Failed, ItemStatus.Pending).Any())
            {
                status = BlockExecutionStatus.Failed;
            }

            var request = new BlockExecutionChangeStatusRequest(new TaskId(_applicationName, _taskName),
                                                                _taskExecutionId,
                                                                BlockType.List,
                                                                BlockExecutionId,
                                                                status);

            Action <BlockExecutionChangeStatusRequest> actionRequest = _listBlockRepository.ChangeStatus;

            RetryService.InvokeWithRetry(actionRequest, request);
        }
        public async Task If_SetStatusOfObjectBlock_ThenItemsCountIsCorrect()
        {
            // ARRANGE
            InsertObjectBlock();

            var request = new BlockExecutionChangeStatusRequest(new TaskId(TestConstants.ApplicationName, TestConstants.TaskName),
                                                                _taskExecution1,
                                                                BlockType.Object,
                                                                _blockExecutionId.ToString(),
                                                                BlockExecutionStatus.Completed);

            request.ItemsProcessed = 10000;


            // ACT
            var sut = CreateSut();
            await sut.ChangeStatusAsync(request);

            var itemCount = new BlocksHelper().GetBlockExecutionItemCount(_blockExecutionId);

            // ASSERT
            Assert.Equal(10000, itemCount);
        }
        public void If_SetStatusOfNumericRangeBlock_ThenItemsCountIsCorrect()
        {
            // ARRANGE
            InsertNumericRangeBlock();

            var request = new BlockExecutionChangeStatusRequest(new TaskId(TestConstants.ApplicationName, TestConstants.TaskName),
                                                                _taskExecution1,
                                                                BlockType.NumericRange,
                                                                _blockExecutionId.ToString(),
                                                                BlockExecutionStatus.Completed);

            request.ItemsProcessed = 10000;


            // ACT
            var sut = CreateSut();

            sut.ChangeStatus(request);

            var itemCount = new BlocksHelper().GetBlockExecutionItemCount(_blockExecutionId);

            // ASSERT
            Assert.AreEqual(itemCount, 10000);
        }
        public void ChangeStatus(BlockExecutionChangeStatusRequest changeStatusRequest)
        {
            try
            {
                using (var connection = CreateNewConnection(changeStatusRequest.TaskId))
                {
                    var command = connection.CreateCommand();
                    command.CommandTimeout = ConnectionStore.Instance.GetConnection(changeStatusRequest.TaskId).QueryTimeoutSeconds;
                    command.CommandText    = GetListUpdateQuery(changeStatusRequest.BlockExecutionStatus);
                    command.Parameters.Add("@BlockExecutionId", SqlDbType.BigInt).Value      = long.Parse(changeStatusRequest.BlockExecutionId);
                    command.Parameters.Add("@BlockExecutionStatus", SqlDbType.TinyInt).Value = (byte)changeStatusRequest.BlockExecutionStatus;
                    command.ExecuteNonQuery();
                }
            }
            catch (SqlException sqlEx)
            {
                if (TransientErrorDetector.IsTransient(sqlEx))
                {
                    throw new TransientException("A transient exception has occurred", sqlEx);
                }

                throw;
            }
        }
Exemple #17
0
 public void ChangeStatus(BlockExecutionChangeStatusRequest changeStatusRequest)
 {
     ChangeStatusOfExecution(changeStatusRequest);
 }
Exemple #18
0
 public async Task ChangeStatusAsync(BlockExecutionChangeStatusRequest changeStatusRequest)
 {
     await ChangeStatusOfExecutionAsync(changeStatusRequest).ConfigureAwait(false);
 }