Exemple #1
0
        public virtual async Task <List <SignalDispatch <long> > > SelectLocked(DispatchQueryParameters <long> parameters,
                                                                                Guid lockId, DateTime lockExpirationDate)
        {
            List <SignalDispatch <long> > list = null;

            using (SenderDbContext context = _dbContextFactory.GetDbContext())
            {
                IQueryable <SignalDispatchLong> query = context.SignalDispatches.AsQueryable <SignalDispatchLong>();

                query = Filter(query, parameters);
                query = query.Where(msg => msg.LockedBy == lockId &&
                                    msg.LockedSinceUtc != null &&
                                    msg.LockedSinceUtc >= lockExpirationDate);

                List <SignalDispatchLong> response = await query
                                                     .OrderBy(msg => msg.SendDateUtc)
                                                     .Take(parameters.Count)
                                                     .ToListAsync()
                                                     .ConfigureAwait(false);

                list = response
                       .Select(_mapper.Map <SignalDispatch <long> >)
                       .ToList();
            }

            return(list);
        }
Exemple #2
0
        public virtual Task <List <SignalDispatch <ObjectId> > > SelectNotSetLock(DispatchQueryParameters <ObjectId> parameters)
        {
            FilterDefinition <SignalDispatch <ObjectId> > filter = ToFilter(parameters);

            var options = new FindOptions()
            {
                AllowPartialResults = true
            };

            return(_collectionFactory
                   .GetCollection <SignalDispatch <ObjectId> >(CollectionNames.DISPATCHES)
                   .Find(filter, options)
                   .SortBy(p => p.SendDateUtc)
                   .Limit(parameters.Count)
                   .ToListAsync());
        }
Exemple #3
0
        public virtual async Task <List <SignalDispatch <long> > > SelectWithSetLock(DispatchQueryParameters <long> parameters,
                                                                                     Guid lockId, DateTime lockExpirationDate)
        {
            //same date as stored in LockTracker
            DateTime lockStartTimeUtc = DateTime.UtcNow;

            int lockedDispatches = await SetLock(parameters, lockId,
                                                 lockStartDate : lockStartTimeUtc, lockExpirationDate : lockExpirationDate)
                                   .ConfigureAwait(false);

            if (lockedDispatches == 0)
            {
                return(new List <SignalDispatch <long> >());
            }

            return(await SelectLocked(parameters, lockId, lockExpirationDate)
                   .ConfigureAwait(false));
        }
Exemple #4
0
        //Select
        protected virtual FilterDefinition <SignalDispatch <ObjectId> > ToFilter(DispatchQueryParameters <ObjectId> parameters)
        {
            var filter = Builders <SignalDispatch <ObjectId> > .Filter.Where(
                p => p.SendDateUtc <= DateTime.UtcNow &&
                parameters.ActiveDeliveryTypes.Contains(p.DeliveryType) &&
                p.FailedAttempts < parameters.MaxFailedAttempts &&
                !parameters.ExcludeIds.Contains(p.SignalDispatchId));

            foreach (ConsolidationLock <ObjectId> locked in parameters.ExcludeConsolidated)
            {
                filter &= Builders <SignalDispatch <ObjectId> > .Filter.Where(
                    x => x.ReceiverSubscriberId != locked.ReceiverSubscriberId ||
                    x.CategoryId != locked.CategoryId ||
                    x.DeliveryType != locked.DeliveryType);
            }

            //string json = FilterDefinitionExtensions.ToJson(filter);

            return(filter);
        }
Exemple #5
0
        public virtual Task <List <SignalDispatch <ObjectId> > > SelectLocked(DispatchQueryParameters <ObjectId> parameters, Guid lockId, DateTime lockExpirationDate)
        {
            FilterDefinition <SignalDispatch <ObjectId> > filter = ToFilter(parameters);

            filter &= Builders <SignalDispatch <ObjectId> > .Filter.Where(
                p => p.LockedBy == lockId &&
                p.LockedSinceUtc != null &&
                p.LockedSinceUtc >= lockExpirationDate);

            var options = new FindOptions()
            {
                AllowPartialResults = true
            };

            return(_collectionFactory
                   .GetCollection <SignalDispatch <ObjectId> >(CollectionNames.DISPATCHES)
                   .Find(filter, options)
                   .SortBy(x => x.SendDateUtc)
                   .Limit(parameters.Count)
                   .ToListAsync());
        }
Exemple #6
0
        public virtual async Task <List <SignalDispatch <long> > > SelectNotSetLock(DispatchQueryParameters <long> parameters)
        {
            List <SignalDispatch <long> > list = null;

            using (SenderDbContext context = _dbContextFactory.GetDbContext())
            {
                IQueryable <SignalDispatchLong> query = context.SignalDispatches.AsQueryable <SignalDispatchLong>();
                query = Filter(query, parameters);
                List <SignalDispatchLong> response = await query
                                                     .OrderBy(msg => msg.SendDateUtc)
                                                     .Take(parameters.Count)
                                                     .ToListAsync()
                                                     .ConfigureAwait(false);

                list = response
                       .Select(_mapper.Map <SignalDispatch <long> >)
                       .ToList();
            }

            return(list);
        }
Exemple #7
0
        public virtual Task <List <SignalDispatch <ObjectId> > > SelectUnlocked(DispatchQueryParameters <ObjectId> parameters, DateTime lockExpirationDate)
        {
            FilterDefinition <SignalDispatch <ObjectId> > filter = ToFilter(parameters);

            filter &= Builders <SignalDispatch <ObjectId> > .Filter.Where(
                p => p.LockedBy == null ||
                p.LockedSinceUtc == null ||
                p.LockedSinceUtc < lockExpirationDate);

            var options = new FindOptions()
            {
                AllowPartialResults = true
            };

            //string filterJson = FilterDefinitionExtensions.ToJson(filter);

            return(_collectionFactory
                   .GetCollection <SignalDispatch <ObjectId> >(CollectionNames.DISPATCHES)
                   .Find(filter, options)
                   .SortBy(p => p.SendDateUtc)
                   .Limit(parameters.Count)
                   .ToListAsync());
        }
Exemple #8
0
        public virtual async Task <List <SignalDispatch <ObjectId> > > SelectWithSetLock(DispatchQueryParameters <ObjectId> parameters, Guid lockId, DateTime lockExpirationDate)
        {
            //same date as stored in LockTracker
            DateTime lockStartTimeUtc = DateTime.UtcNow;

            List <SignalDispatch <ObjectId> > selected = await SelectUnlocked(parameters, lockExpirationDate)
                                                         .ConfigureAwait(false);

            if (selected.Count == 0)
            {
                return(selected);
            }

            List <ObjectId> dispatchIds          = selected.Select(x => x.SignalDispatchId).ToList();
            bool            lockSetOnAllEntities = await SetLock(dispatchIds, lockId, lockStartTimeUtc, lockExpirationDate)
                                                   .ConfigureAwait(false);

            if (lockSetOnAllEntities)
            {
                return(selected);
            }

            return(await SelectLocked(parameters, lockId, lockExpirationDate).ConfigureAwait(false));
        }
Exemple #9
0
        //Select
        protected virtual IQueryable <SignalDispatchLong> Filter(IQueryable <SignalDispatchLong> query, DispatchQueryParameters <long> parameters)
        {
            query = query.Where(msg => msg.SendDateUtc <= DateTime.UtcNow &&
                                msg.FailedAttempts < parameters.MaxFailedAttempts &&
                                parameters.ActiveDeliveryTypes.Contains(msg.DeliveryType) &&
                                !parameters.ExcludeIds.Contains(msg.SignalDispatchId));

            foreach (ConsolidationLock <long> locked in parameters.ExcludeConsolidated)
            {
                query = query.Where(
                    x => x.ReceiverSubscriberId != locked.ReceiverSubscriberId ||
                    x.CategoryId != locked.CategoryId ||
                    x.DeliveryType != locked.DeliveryType);
            }

            return(query);
        }