Example #1
0
        public async Task <JobId> Create(QueueId queue, JobAttributes attributes)
        {
            var newId = JobId.Generate();
            await _collection.InsertOneAsync(new Job { Id = newId, QueueId = queue, Attributes = attributes }).ConfigureAwait(false);

            return(newId);
        }
        public async Task Complete(QueueId queueId, JobId jobId, JobResult result)
        {
            var matchesQueueId = Builders <Job> .Filter.Eq(x => x.QueueId, queueId);

            var matchesJobId = Builders <Job> .Filter.Eq(x => x.Id, jobId);

            var matchesJobIdAndQueueId = Builders <Job> .Filter.And(matchesJobId, matchesQueueId);

            var update = Builders <Job> .Update.Set(x => x.Result, result);

            await _collection.UpdateOneAsync(matchesJobIdAndQueueId, update).ConfigureAwait(false);
        }
Example #3
0
        public async Task AddReport(QueueId queue, JobId id, JobReport report)
        {
            var builder = Builders <Job> .Filter;

            var matchesQueue = builder.Eq(x => x.QueueId, queue);
            var matchesId    = builder.Eq(x => x.Id, id);

            var hasAcknowledgment = builder.Not(builder.Eq(x => x.Acknowledgment, null));

            var matchesQueueAndId = builder.And(matchesId, matchesQueue, hasAcknowledgment);

            var update = Builders <Job> .Update.Push(x => x.Reports, report);

            await _jobs.FindOneAndUpdateAsync(matchesQueueAndId, update).ConfigureAwait(false);
        }
Example #4
0
        public async Task <AcknowledgmentResult> Ack(QueueId queue, JobId id, JobAcknowledgment acknowledgment)
        {
            var builder = Builders <Job> .Filter;

            var matchesQueue           = builder.Eq(x => x.QueueId, queue);
            var matchesId              = builder.Eq(x => x.Id, id);
            var hasNotBeenAcknowledged = builder.Eq(x => x.Acknowledgment, null);

            var filter = builder.And(matchesQueue, matchesId, hasNotBeenAcknowledged);
            var update = Builders <Job> .Update.Set(x => x.Acknowledgment, acknowledgment);

            var modifiedJob = await _jobs.FindOneAndUpdateAsync(filter, update).ConfigureAwait(false);

            return(new AcknowledgmentResult
            {
                Success = modifiedJob != null
            });
        }