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); }
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)); }
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)); } }