Exemplo n.º 1
0
        public async Task HandleTask(ILeasedTask task, CancellationToken cancellationToken)
        {
            if (task == null)
            {
                throw new ArgumentNullException(nameof(task));
            }

            switch (task.GetHandlerSubType())
            {
            case TaskHandlerSubType.USERS_UPDATE:
                await UpdateUsers(cancellationToken);

                break;

            case TaskHandlerSubType.TEAMS_UPDATE:
                await UpdateTeams(cancellationToken);

                break;

            case TaskHandlerSubType.MEMBERS_UPDATE:
                await UpdateMembers(cancellationToken);

                break;

            case TaskHandlerSubType.ONCALL_UPDATE:
                await UpdateOnCall(cancellationToken);

                break;

            default:
                break;
            }
        }
        private async Task TryLockAndHandleTask(ILeasedTask task, CancellationToken stoppingToken)
        {
            // Try get a lock on the task
            await using (var leasedLock = _leasedLockProvider.Create(
                             task.Id,
                             task.GetLeaseDuration(),
                             GetExtensionInterval(task.GetLeaseDuration()), // This prevents for the lock to be released
                             // while the task its being handled
                             HandlerLeasedLockException))
            {
                _logger.LogInformation(
                    $"Attempting to get lock on task with Id {task.Id}");

                // Try get the lock on the task
                var lockAcquired = await leasedLock.TryAcquireAsync();

                if (!lockAcquired)
                {
                    _logger.LogInformation(
                        $"Unable to acquire lock for task with Id {task.Id}");
                    return;
                }

                // We have succesfully leased the task
                var handler = _taskHandlerRegistry.GetForHandlerType(task.GetHandlerType());
                try
                {
                    await handler.HandleTask(task, stoppingToken);
                }
                catch (Exception exception)
                {
                    _logger.LogError(exception, $"Error handling task with Id {task.Id}");
                }
            }
        }
Exemplo n.º 3
0
        public async Task CreateTask(ILeasedTask task, CancellationToken cancellationToken)
        {
            if (task == null)
            {
                throw new ArgumentNullException(nameof(task));
            }

            var taskModel = (LeasedTask)task;

            await _context.Tasks.AddAsync(taskModel, cancellationToken);

            await _context.SaveChangesAsync();
        }
Exemplo n.º 4
0
        public async Task UpdateTask(ILeasedTask task, CancellationToken cancellationToken)
        {
            if (task == null)
            {
                throw new ArgumentNullException(nameof(task));
            }

            var entity = await _context.Tasks.SingleAsync(t => t.Id == task.Id);

            entity.HandlerSubType = task.HandlerSubType;
            entity.HandlerType    = task.HandlerType;
            entity.NextTimeToRun  = task.NextTimeToRun;

            await _context.SaveChangesAsync();
        }
Exemplo n.º 5
0
 public static TimeSpan GetLeaseDuration(this ILeasedTask leasedTask)
 {
     return(TimeSpan.FromMilliseconds(leasedTask.LeaseDuration));
 }
Exemplo n.º 6
0
 public static TaskHandlerSubType GetHandlerSubType(this ILeasedTask leasedTask)
 {
     return(Enum.Parse <TaskHandlerSubType>(leasedTask.HandlerSubType, true));
 }