Beispiel #1
0
        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);
        }
Beispiel #2
0
        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());
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }