private NumericRangeBlockRequest ConvertToNumericRangeBlockRequest(IBlockSettings settings) { var request = new NumericRangeBlockRequest(); request.ApplicationName = _taskExecutionInstance.ApplicationName; request.TaskName = _taskExecutionInstance.TaskName; request.TaskExecutionId = _taskExecutionInstance.TaskExecutionId; request.TaskDeathMode = _taskExecutionOptions.TaskDeathMode; if (_taskExecutionOptions.TaskDeathMode == TaskDeathMode.KeepAlive) { request.KeepAliveDeathThreshold = _taskExecutionOptions.KeepAliveDeathThreshold.Value; } else { request.OverrideDeathThreshold = _taskExecutionOptions.OverrideThreshold.Value; } request.RangeBegin = settings.FromNumber; request.RangeEnd = settings.ToNumber; request.BlockSize = settings.MaxBlockNumberRange; request.ReprocessReferenceValue = settings.ReferenceValueToReprocess; request.ReprocessOption = settings.ReprocessOption; SetConfigurationOverridableSettings(request, settings); return(request); }
public IList <INumericRangeBlockContext> GenerateNumericRangeBlocks(NumericRangeBlockRequest blockRequest) { var blocks = new List <RangeBlockContext>(); if (!string.IsNullOrEmpty(blockRequest.ReprocessReferenceValue)) { blocks = LoadRangeBlocksOfTask(blockRequest); } else { var forceBlocks = GetForcedBlocks(blockRequest); blocks.AddRange(forceBlocks); if (GetBlocksRemaining(blockRequest, blocks) > 0) { LoadFailedAndDeadBlocks(blockRequest, blocks); } int blocksRemaining = GetBlocksRemaining(blockRequest, blocks); if (blocksRemaining > 0 && blockRequest.RangeBegin.HasValue) { blocks.AddRange(GenerateNewNumericRangeBlocks(blockRequest, blocksRemaining)); } } if (!blocks.Any()) { LogEmptyBlockEvent(blockRequest.TaskExecutionId, blockRequest.ApplicationName, blockRequest.TaskName); } var numericRangeBlocks = blocks.Select(x => (INumericRangeBlockContext)x); return(numericRangeBlocks.OrderBy(x => long.Parse(x.NumericRangeBlock.RangeBlockId)).ToList()); }
private List <RangeBlockContext> GenerateNewNumericRangeBlocks(NumericRangeBlockRequest blockRequest, int blockCountLimit) { var newBlocks = new List <RangeBlockContext>(); long blockStart = blockRequest.RangeBegin.Value; long blockEnd = blockStart + (blockRequest.BlockSize.Value - 1); int blocksAdded = 0; bool stopGeneration = false; while (blocksAdded < blockCountLimit && blockStart <= blockRequest.RangeEnd.Value && stopGeneration == false) { if (blockEnd >= blockRequest.RangeEnd.Value) { blockEnd = blockRequest.RangeEnd.Value; stopGeneration = true; } var numericRangeBlock = GenerateNumericRangeBlock(blockRequest, blockStart, blockEnd); var blockContext = CreateBlockContext(blockRequest, numericRangeBlock); newBlocks.Add(blockContext); blocksAdded++; blockStart = blockStart + blockRequest.BlockSize.Value; blockEnd = blockStart + (blockRequest.BlockSize.Value - 1); } return(newBlocks); }
private RangeBlock GenerateNumericRangeBlock(NumericRangeBlockRequest blockRequest, long rangeBegin, long rangeEnd) { var request = new RangeBlockCreateRequest(new TaskId(blockRequest.ApplicationName, blockRequest.TaskName), blockRequest.TaskExecutionId, rangeBegin, rangeEnd); var rangeBlock = _blockRepository.AddRangeBlock(request).Block; Thread.Sleep(5); // guarantee that each block has a unique created date return(rangeBlock); }
private async Task <RangeBlock> GenerateNumericRangeBlockAsync(NumericRangeBlockRequest blockRequest, long rangeBegin, long rangeEnd) { var request = new RangeBlockCreateRequest(new TaskId(blockRequest.ApplicationName, blockRequest.TaskName), blockRequest.TaskExecutionId, rangeBegin, rangeEnd); var rangeBlock = (await _blockRepository.AddRangeBlockAsync(request).ConfigureAwait(false)).Block; await Task.Delay(10).ConfigureAwait(false); // guarantee that each block has a unique created date return(rangeBlock); }