private IEnumerable <Tuple <ScaleoutMapping, int> > GetMappings() { var enumerators = new List <CachedStreamEnumerator>(); var singleStream = _streams.Count == 1; for (var streamIndex = 0; streamIndex < _streams.Count; ++streamIndex) { // Get the mapping for this stream ScaleoutMappingStore store = _streams[streamIndex]; Cursor cursor = _cursors[streamIndex]; // Try to find a local mapping for this payload var enumerator = new CachedStreamEnumerator(store.GetEnumerator(cursor.Id), streamIndex); enumerators.Add(enumerator); } var counter = 0; while (enumerators.Count > 0) { ScaleoutMapping minMapping = null; CachedStreamEnumerator minEnumerator = null; for (int i = enumerators.Count - 1; i >= 0; i--) { counter += 1; CachedStreamEnumerator enumerator = enumerators[i]; ScaleoutMapping mapping; if (enumerator.TryMoveNext(out mapping)) { if (minMapping == null || mapping.ServerCreationTime < minMapping.ServerCreationTime) { minMapping = mapping; minEnumerator = enumerator; } } else { enumerators.RemoveAt(i); } } if (minMapping != null) { minEnumerator.ClearCachedValue(); yield return(Tuple.Create(minMapping, minEnumerator.StreamIndex)); } } _trace.TraceEvent(TraceEventType.Verbose, 0, $"End of mappings (connection ID: {Identity}). Total mappings processed: {counter}"); }
private IEnumerable <Tuple <ScaleoutMapping, int> > GetMappings() { var enumerators = new List <CachedStreamEnumerator>(); for (var streamIndex = 0; streamIndex < _streams.Count; ++streamIndex) { // Get the mapping for this stream ScaleoutMappingStore store = _streams[streamIndex]; Cursor cursor = _cursors[streamIndex]; // Try to find a local mapping for this payload var enumerator = new CachedStreamEnumerator(store.GetEnumerator(cursor.Id), streamIndex); enumerators.Add(enumerator); } while (enumerators.Count > 0) { ScaleoutMapping minMapping = null; CachedStreamEnumerator minEnumerator = null; for (int i = enumerators.Count - 1; i >= 0; i--) { CachedStreamEnumerator enumerator = enumerators[i]; ScaleoutMapping mapping; if (enumerator.TryMoveNext(out mapping)) { if (minMapping == null || mapping.ServerCreationTime < minMapping.ServerCreationTime) { minMapping = mapping; minEnumerator = enumerator; } } else { enumerators.RemoveAt(i); } } if (minMapping != null) { minEnumerator.ClearCachedValue(); yield return(Tuple.Create(minMapping, minEnumerator.StreamIndex)); } } }
private IEnumerable<Tuple<ScaleoutMapping, int>> GetMappings() { var enumerators = new List<CachedStreamEnumerator>(); for (var streamIndex = 0; streamIndex < _streams.Count; ++streamIndex) { // Get the mapping for this stream ScaleoutMappingStore store = _streams[streamIndex]; Cursor cursor = _cursors[streamIndex]; // Try to find a local mapping for this payload var enumerator = new CachedStreamEnumerator(store.GetEnumerator(cursor.Id), streamIndex); enumerators.Add(enumerator); } while (enumerators.Count > 0) { ScaleoutMapping minMapping = null; CachedStreamEnumerator minEnumerator = null; for (int i = enumerators.Count - 1; i >= 0; i--) { CachedStreamEnumerator enumerator = enumerators[i]; ScaleoutMapping mapping; if (enumerator.TryMoveNext(out mapping)) { if (minMapping == null || mapping.ServerCreationTime < minMapping.ServerCreationTime) { minMapping = mapping; minEnumerator = enumerator; } } else { enumerators.RemoveAt(i); } } if (minMapping != null) { minEnumerator.ClearCachedValue(); yield return Tuple.Create(minMapping, minEnumerator.StreamIndex); } } }