Esempio n. 1
0
        public async Task Should_load_stored_snapshot()
        {
            //Arrange
            PrepareDb();
            var container = BuildAdoRepoServiceProvider();
            var stream    = Guid.NewGuid().ToString();
            var snapshot  = new TestSnapshot {
                Prop1 = "aaa", Prop2 = "bbb"
            };
            var snapshotEnvelope = new SnapshotEnvelope(snapshot, 1, stream);

            using (var scope = container.CreateScope())
            {
                //Act
                var snapshotStore = scope.ServiceProvider.GetService <ISnapshotStore>();

                await snapshotStore.StoreSnapshotAsync(snapshotEnvelope, CancellationToken.None);

                var loadedSnapshotEnvelope = await snapshotStore.LoadSnapshotAsync(stream, CancellationToken.None);

                //Assert
                loadedSnapshotEnvelope.Should().NotBeNull();
                loadedSnapshotEnvelope.Should().BeEquivalentTo(snapshotEnvelope);
            }
        }
Esempio n. 2
0
        public async Task StoreSnapshotAsync(SnapshotEnvelope snapshotEnvelope, CancellationToken cancellationToken = default)
        {
            var stopWatch = new Stopwatch();

            stopWatch.Start();

            var snapshotDescriptor = SerializeSnapshot(snapshotEnvelope.StreamId, snapshotEnvelope.Snapshot, snapshotEnvelope.AggregateVersion);
            await _snapshotRepository.StoreSnapshotAsync(snapshotEnvelope.StreamId, snapshotDescriptor, cancellationToken);

            stopWatch.Stop();
            _logger.LogDebug("SnapshotStore.StoreSnapshotAsync for {Stream} took {ElapsedMilliseconds} ms", snapshotEnvelope.StreamId, stopWatch.ElapsedMilliseconds);
        }
        public void Execute(PersistSnapshotCommand <TSnapshot> command)
        {
            if (command.ProducedEventCount < _persistSnapshotPeriod)
            {
                return;
            }

            var snapshotMetadata = new SnapshotMetadata(command.PreviouslyDispatchedCommandIds);
            var snapshotEnvelope = new SnapshotEnvelope <TSnapshot>(command.Snapshot, snapshotMetadata);

            _snapshotDataContext.Persist(snapshotEnvelope);
        }