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