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; } }
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); }
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); }
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); }
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); }
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; } }
public void ChangeStatus(BlockExecutionChangeStatusRequest changeStatusRequest) { ChangeStatusOfExecution(changeStatusRequest); }
public async Task ChangeStatusAsync(BlockExecutionChangeStatusRequest changeStatusRequest) { await ChangeStatusOfExecutionAsync(changeStatusRequest).ConfigureAwait(false); }