Inheritance: Taskling.InfrastructureContracts.Blocks.BlockRequestBase
        public void Start()
        {


            var request = new BlockExecutionChangeStatusRequest(new TaskId(_applicationName, _taskName),
                _taskExecutionId,
                _block.RangeType,
                BlockExecutionId,
                BlockExecutionStatus.Started);

            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 void 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();
            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 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);
        }