protected AggregateRootReadModelGenerator(IEventStreamReader <TEventStream> eventStreamReader)
        {
            _eventStreamReader = eventStreamReader;

            RegisterEventAppliers()
            .For <TAggregateRootEventInterface>(e => ReadModel.Id = e.AggregateRootId);
        }
Esempio n. 2
0
 public EventRepository(
     IEventStreamWriter streamWriter,
     IEventStreamReader streamReader)
 {
     _streamWriter = streamWriter;
     _streamReader = streamReader;
 }
 public ReadModelGenerator(IEventStreamReader <PersonEventStream> eventStreamReader) : base(eventStreamReader)
 {
     RegisterEventAppliers()
     .For <IFirstNameUpdated>(e => ReadModel.FirstName         = e.FirstName)
     .For <ILastNameUpdated>(e => ReadModel.LastName           = e.LastName)
     .For <IMaritalStatusUpdated>(e => ReadModel.MaritalStatus = e.MaritalStatus)
     ;
 }
Esempio n. 4
0
        public async Task ReceiveEventsAsync_WhenReceivingWasNotStartedBefore_CommitsReaderVersion(
            [Frozen] CommitStreamVersionFMock commitStreamVersionMock,
            [Frozen] IEventStreamReader reader,
            EventStreamConsumer consumer)
        {
            await consumer.ReceiveEventsAsync();

            Assert.Equal(0, commitStreamVersionMock.CallsCount);
            Assert.Equal(StreamVersion.Unknown, commitStreamVersionMock.CommitedVersion);
        }
Esempio n. 5
0
 public StudentReadModelGenerator(IEventStreamReader eventStreamReader) : base(eventStreamReader)
 {
     RegisterEventAppliers()
     .For <IStudentEvent>(e => ReadModel.Id             = e.AggregateRootId)
     .For <IStudentRegisteredEvent>(e => ReadModel.Name = e.Name)
     .For <IStudentEnrolledEvent>(e => ReadModel.Subjects.Add((Subject)e.Subject))
     .For <IAddressChangedEvent>(e => ReadModel.Address = new Address {
         Street = e.Street, ZipCode = e.ZipCode, City = e.City
     });
 }
 public PartitionedProjectionQuery
     (IPartitionedProjectionStateRepository <T> stateRepository,
     IEventStreamReader streamReader,
     PartitionedProjectionProfile <T> projectionProfile,
     IServiceProvider serviceProvider)
 {
     _stateRepository   = stateRepository;
     _streamReader      = streamReader;
     _projectionProfile = projectionProfile;
     _serviceProvider   = serviceProvider;
 }
Esempio n. 7
0
        private async Task EnsureStreamReaderInitializedAsync()
        {
            if (m_reader == null)
            {
                m_reader = await m_readerFactory.CreateAsync();

                m_stateMachine = m_reader.HasEvents
                    ? new EventStreamConsumerStateMachine(m_reader.ReaderStreamVersion.Decrement())
                    : new EventStreamConsumerStateMachine(m_reader.ReaderStreamVersion);
            }
        }
Esempio n. 8
0
        private static IObservable <IEnumerable <Revision> > EventStreamBatchesFrom(IEventStreamReader eventStoreClient, EventStreamCheckpoint checkpoint,
                                                                                    TimeSpan timeout, TimeSpan pollingInterval, bool infinitePollingEnabled = false, int retries = DefaultRetries, IScheduler scheduler = null)
        {
            scheduler = scheduler ?? Scheduler.Default;

            return(ObservableExtensions.Generate(async() =>
            {
                IEnumerable <Revision> result = await EventStreamSingleBatch(eventStoreClient, checkpoint,
                                                                             NumberOfResultsPerRequest, timeout, retries, scheduler);
                return new EventStreamPollingState
                {
                    LastCheckpoint = EventStreamCheckpoint.CreateStreamCheckpoint(checkpoint.StreamId, checkpoint.RevisionId + result.Count(), 0),
                    LastStreamBatch = result
                };
            },
                                                 value => (value.LastStreamBatch != null && value.LastStreamBatch.Count() > 0) || infinitePollingEnabled,
                                                 async value =>
            {
                var streamBatch = EventStreamSingleBatch(eventStoreClient, value.LastCheckpoint,
                                                         NumberOfResultsPerRequest, timeout, retries, scheduler);

                IEnumerable <Revision> result = null;

                //Introduce delay before performing next request (if required)
                var delay = Observable.Empty <IEnumerable <Revision> >().Delay(pollingInterval);
                if (value.LastStreamBatch == null || value.LastStreamBatch.Count() == 0 && infinitePollingEnabled)
                {
                    result = await delay.Concat(streamBatch);
                }
                else
                {
                    result = await streamBatch;
                }

                if (result != null && result.Count() > 0)
                {
                    return new EventStreamPollingState
                    {
                        LastCheckpoint = EventStreamCheckpoint.CreateStreamCheckpoint(value.LastCheckpoint.StreamId, value.LastCheckpoint.RevisionId + result.Count(), 0),
                        LastStreamBatch = result
                    };
                }
                else
                {
                    return new EventStreamPollingState
                    {
                        LastCheckpoint = EventStreamCheckpoint.CreateStreamCheckpoint(value.LastCheckpoint.StreamId, value.LastCheckpoint.RevisionId, 0),
                        LastStreamBatch = Enumerable.Empty <Revision>()
                    };
                }
            },
                                                 value => value.LastStreamBatch, scheduler));
        }
Esempio n. 9
0
 public static IObservable <IEnumerable <Revision> > EventStreamSingleBatch(IEventStreamReader eventStoreClient, EventStreamCheckpoint checkpoint,
                                                                            int numberOfResults, TimeSpan timeout, int retries, IScheduler scheduler)
 {
     return(Observable.Return(1, scheduler)
            .SelectMany(_ =>
     {
         return eventStoreClient.GetEventStreamFromAsync(checkpoint.StreamId, checkpoint.RevisionId, numberOfResults);
     })
            .Do(_ => Console.WriteLine(string.Format("Requested event stream range [{0} - {1}]", checkpoint.RevisionId, checkpoint.RevisionId + numberOfResults - 1)))
            .Timeout(timeout, scheduler)
            .Retry(retries)
            .Select(stream => stream.Revisions.AsEnumerable()));
 }
Esempio n. 10
0
        public async Task ReceiveEventsAsync_WhenReceivingWasStarted_CommitsReaderVersion(
            [Frozen] StreamVersion streamVersion,
            [Frozen] CommitStreamVersionFMock commitStreamVersionMock,
            [Frozen] IEventStreamReader reader,
            EventStreamConsumer consumer)
        {
            await consumer.ReceiveEventsAsync(); // starts receiving

            await consumer.ReceiveEventsAsync(); // continues receiving and commits previous events

            Assert.Equal(1, commitStreamVersionMock.CallsCount);
            Assert.Equal(streamVersion.Increment(reader.Events.Count), commitStreamVersionMock.CommitedVersion);
        }
Esempio n. 11
0
 protected EventStoredActorService
     (StatefulServiceContext context,
     ActorTypeInformation actorTypeInfo,
     Func <Microsoft.ServiceFabric.Actors.Runtime.ActorService, ActorId, ActorBase> actorFactory = null,
     Func <Microsoft.ServiceFabric.Actors.Runtime.ActorBase, IActorStateProvider, IActorStateManager> stateManagerFactory = null,
     IActorStateProvider stateProvider = null,
     ActorServiceSettings settings     = null,
     IReliableStateManagerReplica reliableStateManagerReplica = null,
     IEventStreamReader <TEventStream> eventStreamReader      = null)
     : base(context, actorTypeInfo, actorFactory, stateManagerFactory, stateProvider, settings, reliableStateManagerReplica)
 {
     StateProviderEventStreamReader = eventStreamReader ?? new EventStreamReader <TEventStream>(StateProvider, EventStoredActor <TAggregateRoot, TEventStream> .EventStreamStateKey);
 }
Esempio n. 12
0
        public async Task CloseAsync_WhenReaderInCompletedStateAndHasNoUnprocessedEvents_CommitsConsumedVersion(
            [Frozen] StreamVersion version,
            [Frozen] CommitStreamVersionFMock commitStreamVersionMock,
            [Frozen] IEventStreamReader reader,
            EventStreamConsumer consumer)
        {
            await consumer.ReceiveEventsAsync();

            consumer.EnumerateEvents().ToList();

            await consumer.CloseAsync();

            Assert.Equal(1, commitStreamVersionMock.CallsCount);
            Assert.Equal(reader.StreamVersion.Increment(reader.Events.Count), commitStreamVersionMock.CommitedVersion);
        }
Esempio n. 13
0
        public async Task CommitProcessedStreamVersionAsync_WhenReceivingWasStartedAndAutoCommitDisabled_DoesNotCommitReaderVersion(
            [Frozen] StreamVersion streamVersion,
            [Frozen] CommitStreamVersionFMock commitStreamVersionMock,
            [Frozen] IEventStreamReader reader,
            EventStreamConsumer consumer)
        {
            var expectedVersion = reader.StreamVersion.Increment(reader.Events.Count * 2);

            await consumer.ReceiveEventsAsync();

            await consumer.ReceiveEventsAsync();

            await consumer.CommitProcessedStreamVersionAsync(false);

            Assert.Equal(1, commitStreamVersionMock.CallsCount);
            Assert.Equal(expectedVersion, commitStreamVersionMock.CommitedVersion);
        }
Esempio n. 14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Repository{TAggregateRoot}"/> class.
 /// </summary>
 /// <param name="rootFactory">The aggregate root entity factory.</param>
 /// <param name="unitOfWork">The unit of work.</param>
 /// <param name="eventStreamReader">The event stream reader.</param>
 /// <exception cref="System.ArgumentNullException">Thrown when the <paramref name="rootFactory"/> or the <paramref name="unitOfWork"/> or the <paramref name="eventStreamReader"/> is null.</exception>
 public Repository(Func <TAggregateRoot> rootFactory, UnitOfWork unitOfWork, IEventStreamReader eventStreamReader)
 {
     if (rootFactory == null)
     {
         throw new ArgumentNullException("rootFactory");
     }
     if (unitOfWork == null)
     {
         throw new ArgumentNullException("unitOfWork");
     }
     if (eventStreamReader == null)
     {
         throw new ArgumentNullException("eventStreamReader");
     }
     _rootFactory       = rootFactory;
     _unitOfWork        = unitOfWork;
     _eventStreamReader = eventStreamReader;
 }
Esempio n. 15
0
        public EventStreamConsumer(
            string consumerName,
            IEventStreamReader streamReader,
            IEventStreamConsumingSession session,
            StreamVersion commitedStreamVersion,
            Func<StreamVersion, Task> commitConsumedVersion)
        {
            Require.NotEmpty(consumerName, "consumerName");
            Require.NotNull(streamReader, "streamReader");
            Require.NotNull(session, "session");
            Require.NotNull(commitConsumedVersion, "commitConsumedVersion");

            m_consumerName = consumerName;
            m_reader = streamReader;
            m_session = session;
            m_commitConsumedVersion = commitConsumedVersion;
            m_commitedStreamVersion = commitedStreamVersion;
        }
Esempio n. 16
0
        public static IObservable <Revision> ContinuousEventStreamFrom(IEventStreamReader eventStoreClient, EventStreamCheckpoint checkpoint,
                                                                       TimeSpan timeout, TimeSpan pollingInterval, int retries = DefaultRetries, IScheduler scheduler = null)
        {
            return(Observable.Create <Revision>(observer =>
            {
                var poll = ContinuousEventStreamBatchesFrom(eventStoreClient, checkpoint, pollingInterval, timeout, retries, scheduler);

                return poll.Subscribe(
                    value =>
                {
                    foreach (var revision in value)
                    {
                        observer.OnNext(revision);
                    }
                },
                    ex => observer.OnError(ex),
                    () => observer.OnCompleted());
            }));
        }
Esempio n. 17
0
        public async Task RememberConsumedStreamVersionAsync_WhenAllEventsWereConsumed_CommitsReaderVersion(
            [Frozen] StreamVersion streamVersion,
            [Frozen] IEventStreamReader streamReader,
            [Frozen] CommitStreamVersionFMock commitStreamVersionMock,
            EventStreamConsumer consumer)
        {
            await consumer.ReceiveEventsAsync();

            var handledEvents = 0;

            foreach (var e in consumer.EnumerateEvents())
            {
                handledEvents++;
            }

            await consumer.CommitProcessedStreamVersionAsync(true);

            Assert.Equal(1, commitStreamVersionMock.CallsCount);
            Assert.Equal(streamReader.StreamVersion.Increment(streamReader.Events.Count), commitStreamVersionMock.CommitedVersion);
        }
Esempio n. 18
0
 private static IObservable <IEnumerable <Revision> > AllEventStreamBatchesFrom(IEventStreamReader eventStoreClient, GlobalCheckpoint checkpoint, TimeSpan timeout,
                                                                                int retries, IScheduler scheduler)
 {
     return(AllEventStreamBatchesFrom(eventStoreClient, checkpoint, timeout, TimeSpan.Zero, false, retries, scheduler));
 }
Esempio n. 19
0
 private static IObservable <IEnumerable <Revision> > AllEventStreamsSingleBatch(IEventStreamReader eventStoreClient,
                                                                                 GlobalCheckpoint checkpoint, int numberOfResults, TimeSpan timeout, int retries, IScheduler scheduler)
 {
     return(Observable.Return(1, scheduler)
            .SelectMany(_ =>
     {
         return eventStoreClient.GetAllEventStreamsFromAsync(checkpoint.CommitId, numberOfResults);
     })
            .Do(_ => Console.WriteLine(string.Format("Requested all event streams range (commit) [{0} - {1}]", checkpoint.CommitId, checkpoint.CommitId + numberOfResults - 1)))
            .Timeout(timeout, scheduler)
            .Retry(retries)
            .Select(stream => stream.Revisions.AsEnumerable()));
 }
 public EventStreamReactiveReader(IEventStreamReader eventStreamReader)
 {
     this.EventStreamReader = eventStreamReader;
 }
Esempio n. 21
0
 public EventStreamChannel(IEventStreamReader eventStreamReader, Stream stream, CancellationToken cancellationToken = default)
 {
     _eventStreamReader = eventStreamReader;
     _pipeReader        = PipeReader.Create(stream);
     _ = Task.Run(async() => await ReceivePacketsAsync(_pipeReader, cancellationToken), cancellationToken);
 }
Esempio n. 22
0
 public ProjectionProcessor(BlobEventStreamReader blobEventStreamReader)
 {
     // Initialise the reader to use to read the events to be processed
     this.eventStreamReader = blobEventStreamReader;
 }
Esempio n. 23
0
 public CommandHandler(IEventStreamReader eventStreamReader)
 {
     _eventStreamReader = eventStreamReader;
 }
Esempio n. 24
0
 private static IObservable <IEnumerable <Revision> > EventStreamBatchesFrom(IEventStreamReader eventStoreClient, EventStreamCheckpoint checkpoint,
                                                                             TimeSpan timeout, int retries = DefaultRetries, IScheduler scheduler = null)
 {
     return(EventStreamBatchesFrom(eventStoreClient, checkpoint, timeout, TimeSpan.Zero, false, retries, scheduler));
 }
Esempio n. 25
0
 public EventStreamChannel(IEventStreamReader eventStreamReader, Stream stream)
 {
     _eventStreamReader = eventStreamReader;
     _pipeReader        = PipeReader.Create(stream);
     _ = Task.Run(async() => await ReceivePacketsAsync(_pipeReader));
 }
Esempio n. 26
0
 public static IObservable <Revision> ContinuousEventStreamFrom(IEventStreamReader eventStoreClient, EventStreamCheckpoint checkpoint,
                                                                TimeSpan timeout, int retries = DefaultRetries, IScheduler scheduler = null)
 {
     return(ContinuousEventStreamFrom(eventStoreClient, checkpoint, timeout, DefaultPollingInterval, retries, scheduler));
 }
Esempio n. 27
0
 protected ReadModelGenerator(IEventStreamReader eventStreamReader)
 {
     _eventStreamReader = eventStreamReader;
 }
Esempio n. 28
0
 public EventStreamChannel(IEventStreamReader eventStreamReader, Stream stream)
 {
     _eventStreamReader = eventStreamReader;
     _pipeReader        = PipeReader.Create(stream);
 }
 public EventStreamTrackedReactiveReader(IEventStreamTrackerRepository trackerRepository, IEventStreamReader client)
 {
     this.TrackerRepository = trackerRepository;
     this.Client            = client;
 }
Esempio n. 30
0
 public ClassificationProcessor(TableEventStreamReader tableEventStreamReader)
 {
     // Initialise the reader to use to read the events to be processed
     this.eventStreamReader = tableEventStreamReader;
 }
Esempio n. 31
0
 private static IObservable <IEnumerable <Revision> > ContinuousEventStreamBatchesFrom(IEventStreamReader eventStoreClient, EventStreamCheckpoint checkpoint,
                                                                                       TimeSpan timeout, TimeSpan pollingInterval, int retries = DefaultRetries, IScheduler scheduler = null)
 {
     return(EventStreamBatchesFrom(eventStoreClient, checkpoint, timeout, pollingInterval, true, retries, scheduler));
 }