예제 #1
0
        private IEnumerable <StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> > LookupStorages(IEnumerable <ITypedKey <TKey, TMeasureType> > taggedIds)
        {
            var result = new Dictionary <StorageSelection <TKey, TEntry, IStorage <TKey, TEntry> >, StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> >();

            foreach (var id in taggedIds)
            {
                var storages = _storageSelector.GetStorage(id.Key, null, null);
                foreach (var storage in storages)
                {
                    StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> existingStorage;
                    if (!result.TryGetValue(storage, out existingStorage))
                    {
                        existingStorage         = new StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry>(storage.Storage);
                        existingStorage.Lookups = new List <ITypedKey <TKey, TMeasureType> >();
                        result.Add(storage, existingStorage);
                    }

                    existingStorage.Lookups.Add(id);
                }
            }

            return(result.Values);
        }
예제 #2
0
        private async Task <ReadResult <TKey, TEntry> > ReadLatestInternal(TKey key, int count)
        {
            var storages = _storageSelector.GetStorage(key, null, null);

            foreach (var storage in storages)
            {
                var rr = await storage.Storage.ReadLatestAsync(key, count);

                if (rr.Entries.Count > 0)
                {
                    return(rr);
                }
            }

            return(new ReadResult <TKey, TEntry>(key, Sort.Descending));
        }
예제 #3
0
        private async Task <ReadResult <TKey, TEntry> > ReadLatestInternal(TKey key, int count)
        {
            var leftToRead = count;
            var results    = new List <ReadResult <TKey, TEntry> >();

            var storages = _storageSelector.GetStorage(key, null, null);

            foreach (var storage in storages)
            {
                var rr = await storage.Storage.ReadLatestAsync(key, leftToRead);

                var read = rr.Entries.Count;
                leftToRead -= read;

                if (read > 0)
                {
                    results.Add(rr);
                }

                if (leftToRead <= 0)
                {
                    break;
                }
            }

            if (results.Count == 0)
            {
                return(new ReadResult <TKey, TEntry>(key, Sort.Descending));
            }
            else if (results.Count == 1)
            {
                return(results[0]);
            }
            else
            {
                return(new ReadResult <TKey, TEntry>(key, Sort.Descending, results));
            }
        }