Пример #1
0
        public async Task<ISequence> GetAsync(SequenceKey sequenceKey)
        {
            var sequence = await DbSet.FirstOrDefaultAsync(s => s.Key == sequenceKey.Value);


            return sequence;
        }
Пример #2
0
        public async Task <ISequence> GetAsync(SequenceKey sequenceKey)
        {
            var sequence = await DbSet.FirstOrDefaultAsync(s => s.Key == sequenceKey.Value);


            return(sequence);
        }
Пример #3
0
        public async Task <bool> UpdateAsync(SequenceKey sequenceKey, ISequence sequence)
        {
            var sequenceEntity = sequence as Sequences;

            sequenceEntity.SetUpdate(() => sequenceEntity.CurrentValue, sequenceEntity.CurrentValue);
            var result = await FindOneAndUpdateAsync(p => p.Id == sequenceKey.Value, sequenceEntity.NeedUpdateList);

            return(result != null);
        }
Пример #4
0
        public async Task <bool> UpdateAsync(SequenceKey sequenceKey, ISequence sequence)
        {
            var sequenceEntity = (SequenceTableEntity)sequence;

            sequenceEntity.RowKey       = sequenceKey.Value;
            sequenceEntity.PartitionKey = PartitionKey;

            var updatedSequenceEntity = await UpdateAsync(sequenceEntity);

            return(updatedSequenceEntity != null);
        }
Пример #5
0
 public Task <ISequence> GetAsync(SequenceKey sequenceKey)
 {
     try
     {
         return(Task.FromResult(dictionary[sequenceKey.Value]));
     }
     catch (Exception)
     {
         return(Task.FromResult(default(ISequence)));
     }
 }
Пример #6
0
 public Task<ISequence> GetAsync(SequenceKey sequenceKey)
 {
     try
     {
         return Task.FromResult(dictionary[sequenceKey.Value]);
     }
     catch (Exception)
     {
         return Task.FromResult(default(ISequence));
     }
 }
Пример #7
0
        public async Task<bool> UpdateAsync(SequenceKey sequenceKey, ISequence sequence)
        {
            var updateResult = await SaveChangesAsync();

            if (updateResult != 1)
            {
                Reload(sequence);

                return false;
            }
            return true;
        }
Пример #8
0
        public async Task <bool> UpdateAsync(SequenceKey sequenceKey, ISequence sequence)
        {
            var updateResult = await SaveChangesAsync();

            if (updateResult != 1)
            {
                Reload(sequence);

                return(false);
            }
            return(true);
        }
Пример #9
0
        public Task <bool> UpdateAsync(SequenceKey sequenceKey, ISequence sequence)
        {
            try
            {
                dictionary[sequenceKey.Value] = sequence;

                return(Task.FromResult(UpdateValue));
            }
            catch (Exception)
            {
                return(Task.FromResult(UpdateValue));
            }
        }
Пример #10
0
        public Task<bool> UpdateAsync(SequenceKey sequenceKey, ISequence sequence)
        {
            try
            {
                dictionary[sequenceKey.Value] = sequence;

                return Task.FromResult(UpdateValue);
            }
            catch (Exception)
            {
                return Task.FromResult(UpdateValue);
            }
        }
        private IEnumerable<CurrentMessageInformation> Pending(SequenceKey key, uint receivedSequence)
        {
            var toProcess = pendingMessages.GetOrAdd(key, SortedDictionary)
                                           .Where(p => p.Key, (p, c) => c == p + 1, receivedSequence)
                                           .ToArray();

            if(toProcess.Any())
                log.DebugFormat("Processing {0} out of {1} pending messages for key {2}", toProcess.Length, pendingMessages[key].Count, key);

            foreach (var p in toProcess)
                pendingMessages[key].Remove(p.Key);

            return toProcess.Select(p => p.Value);
        }
Пример #12
0
        public Task<SequenceKey> AddAsync(ISequence sequence)
        {
            try
            {
                var key = new SequenceKey { Value = Guid.NewGuid().ToString() };

                dictionary.Add(key.Value, sequence);

                return Task.FromResult(key);
            }
            catch (Exception)
            {
                return Task.FromResult(default(SequenceKey));
            }
        }
        public IEnumerable <CurrentMessageInformation> Filter(IEnumerable <CurrentMessageInformation> input, IModel model)
        {
            foreach (var message in input)
            {
                if (message.Headers == null)
                {
                    log.Warn("Received message with no headers, perhaps it's coming from an unexpected source?");
                    TryAckFilteredMessage(model, message);
                }
                else if (!message.Headers.ContainsKey(Headers.Sequence))
                {
                    yield return(message);
                }
                else
                {
                    var receivedSequence = BitConverter.ToUInt32((byte[])message.Headers[Headers.Sequence], 0);
                    var sequenceKey      = new SequenceKey(message.Endpoint, message.MessageType);

                    if (Unknown(sequenceKey) || CorrectSequence(sequenceKey, receivedSequence))
                    {
                        nextSequences[sequenceKey] = receivedSequence + 1;
                        log.TraceFormat("Correct sequence {0} for key {1}", receivedSequence, sequenceKey);
                        yield return(message);

                        foreach (var p in Filter(Pending(sequenceKey, receivedSequence), model))
                        {
                            yield return(p);
                        }
                    }
                    else if (Unordered(sequenceKey, receivedSequence))
                    {
                        log.WarnFormat("Unexpected sequence {0} for key {1}. Was expecting {2}", receivedSequence,
                                       sequenceKey, nextSequences[sequenceKey]);
                        pendingMessages[sequenceKey].Add(receivedSequence, message);
                    }
                    else
                    {
                        log.DebugFormat(
                            "Filtering out (and acking) message sequence {0} - id {1} for key {2} as already processed",
                            receivedSequence,
                            message.MessageId,
                            sequenceKey);

                        TryAckFilteredMessage(model, message);
                    }
                }
            }
        }
Пример #14
0
        public async Task <bool> UpdateAsync(SequenceKey sequenceKey, ISequence sequence)
        {
            var sequenceEntity = sequence as Sequences;

            sequenceEntity.Id = sequenceKey.Value;

            var query  = Query.And(Query.EQ("_id", ObjectId.Parse(sequenceKey.Value)));
            var update = MongoDB.Driver.Builders.Update <Sequences> .Set(c => c.CurrentValue, sequenceEntity.CurrentValue);

            var updatedSequenceEntity = this.Collection.FindAndModify(new FindAndModifyArgs()
            {
                Query = query, Update = update, VersionReturned = FindAndModifyDocumentVersion.Original, SortBy = null
            });
            var doc = updatedSequenceEntity.ModifiedDocument;

            return(doc != null);
        }
Пример #15
0
        public Task <SequenceKey> AddAsync(ISequence sequence)
        {
            try
            {
                var key = new SequenceKey {
                    Value = Guid.NewGuid().ToString()
                };

                dictionary.Add(key.Value, sequence);

                return(Task.FromResult(key));
            }
            catch (Exception)
            {
                return(Task.FromResult(default(SequenceKey)));
            }
        }
        private IEnumerable <CurrentMessageInformation> Pending(SequenceKey key, uint receivedSequence)
        {
            var toProcess = pendingMessages.GetOrAdd(key, SortedDictionary)
                            .Where(p => p.Key, (p, c) => c == p + 1, receivedSequence)
                            .ToArray();

            if (toProcess.Any())
            {
                log.DebugFormat("Processing {0} out of {1} pending messages for key {2}", toProcess.Length, pendingMessages[key].Count, key);
            }

            foreach (var p in toProcess)
            {
                pendingMessages[key].Remove(p.Key);
            }

            return(toProcess.Select(p => p.Value));
        }
        public IEnumerable<CurrentMessageInformation> Filter(IEnumerable<CurrentMessageInformation> input, IModel model)
        {
            foreach (var message in input)
            {
                var receivedSequence = BitConverter.ToUInt32((byte[])message.Headers[Headers.Sequence], 0);
                var sequenceKey = new SequenceKey(message.Endpoint, message.MessageType);

                if (Unknown(sequenceKey) || CorrectSequence(sequenceKey, receivedSequence))
                {
                    nextSequences[sequenceKey] = receivedSequence + 1;
                    log.TraceFormat("Correct sequence {0} for key {1}", receivedSequence, sequenceKey);
                    yield return message;

                    foreach (var p in Filter(Pending(sequenceKey, receivedSequence), model))
                        yield return p;
                }
                else if (Unordered(sequenceKey, receivedSequence))
                {
                    log.WarnFormat("Unexpected sequence {0} for key {1}. Was expecting {2}", receivedSequence, sequenceKey, nextSequences[sequenceKey]);
                    pendingMessages[sequenceKey].Add(receivedSequence, message);
                }
                else
                {
                    log.DebugFormat("Filtering out (and acking) message sequence {0} - id {1} for key {2} as already processed",
                                    receivedSequence,
                                    message.MessageId,
                                    sequenceKey);

                    try
                    {
                        model.BasicAck(message.DeliveryTag, false);
                    }
                    catch (AlreadyClosedException e)
                    {
                        log.Info("Could not ack filtered-out message because model was already closed", e);
                    }
                    catch (Exception e)
                    {
                        log.Warn("Could not ack filtered-out message for unknown cause", e);
                    }
                }
            }
        }
Пример #18
0
        public string NextVal()
        {
            const string YEAR4D_MM  = "{YYYYMM}";
            const string YEAR4D     = "{YYYY}";
            const string YEAR2D     = "{YY}";
            const string YEAR2D_MM  = "{YYMM}";
            const string YEAR4D_MMM = "{YYYYMMM}";

            string[] simpleList = new string[] { YEAR2D, YEAR2D_MM, YEAR4D, YEAR4D, YEAR4D_MM };
            CurrentValue += 1;
            string currVal = CurrentValue.ToString().PadLeft(SequenceId.SequLength, '0');

            Save();
            string value = SequenceId.SequMask.Replace("{$}", currVal);

            if (value.Contains(YEAR4D_MMM))
            {
                int    monVal   = int.Parse(SequenceKey.Substring(4, 2));
                string monName  = new DateTime(2010, monVal, 1).ToString("MMM", CultureInfo.InvariantCulture);
                string yearPart = SequenceKey.Substring(0, 4) + monName;

                value = value.Replace(YEAR4D_MMM, yearPart);
            }
            else
            {
                foreach (var item in simpleList)
                {
                    if (value.Contains(item) && SequenceKey.Length > (item.Length - 2))
                    {
                        value = value.Replace(item, SequenceKey.Substring(0, item.Length));
                        break;
                    }
                }
            }

            return(value);
        }
Пример #19
0
        public async Task <ISequence> GetAsync(SequenceKey sequenceKey)
        {
            var sequenceEntity = await base.Get(PartitionKey, sequenceKey.Value);

            return(sequenceEntity);
        }
 private bool Unordered(SequenceKey key, uint sequence)
 {
     return(sequence > nextSequences[key]);
 }
 private bool Unknown(SequenceKey key)
 {
     return(!nextSequences.ContainsKey(key));
 }
 private bool Unordered(SequenceKey key, uint sequence)
 {
     return sequence > nextSequences[key];
 }
Пример #23
0
        public async Task <ISequence> GetAsync(SequenceKey sequenceKey)
        {
            var sequenceEntity = base.GetById(sequenceKey.Value);

            return(sequenceEntity);
        }
 private bool CorrectSequence(SequenceKey key, uint sequence)
 {
     return sequence == nextSequences[key];
 }
Пример #25
0
        public async Task <ISequence> GetAsync(SequenceKey sequenceKey)
        {
            var sequenceEntity = await GetByKeyAsync(sequenceKey.Value);

            return(sequenceEntity);
        }
 private bool Unknown(SequenceKey key)
 {
     return !nextSequences.ContainsKey(key);
 }
 private bool CorrectSequence(SequenceKey key, uint sequence)
 {
     return(sequence == nextSequences[key]);
 }