Пример #1
0
 async Task <StreamFetcher <MongoDB.Events.Event> > CreateStreamFetcherForEventLog(ScopeId scopeId, CancellationToken cancellationToken) =>
 new StreamFetcher <MongoDB.Events.Event>(
     await _streams.GetEventLog(scopeId, cancellationToken).ConfigureAwait(false),
     Builders <MongoDB.Events.Event> .Filter,
     _ => _.EventLogSequenceNumber,
     Builders <MongoDB.Events.Event> .Projection.Expression(_ => _eventConverter.ToRuntimeStreamEvent(_)),
     Builders <MongoDB.Events.Event> .Projection.Expression(_ => new Artifacts.Artifact(_.Metadata.TypeId, _.Metadata.TypeGeneration)));
Пример #2
0
    /// <inheritdoc/>
    public async Task <CommittedEvents> FetchCommittedEvents(ScopeId scope, EventLogSequenceNumber from, int limit, CancellationToken cancellationToken)
    {
        try
        {
            var eventLog = await GetEventLog(scope, cancellationToken).ConfigureAwait(false);

            var events = await eventLog
                         .Find(_eventFilter.Gte(e => e.EventLogSequenceNumber, from))
                         .Sort(Builders <MongoDB.Events.Event> .Sort.Ascending(_ => _.EventLogSequenceNumber))
                         .Limit(limit)
                         .ToListAsync(cancellationToken).ConfigureAwait(false);

            return(new CommittedEvents(
                       events.Select(_ => _eventConverter.ToRuntimeStreamEvent(_))
                       .Select(_ => _.Event)
                       .ToList()));
        }
        catch (Exception ex)
        {
            throw new EventStoreUnavailable("Mongo wait queue is full", ex);
        }
    }