From e164d9a531addc326ac563eb7a082ed146f268b9 Mon Sep 17 00:00:00 2001 From: David Guida <1432872+mizrael@users.noreply.github.com> Date: Fri, 7 Jun 2024 16:45:29 -0400 Subject: [PATCH] added semaphore to writer --- src/EvenireDB/Persistence/EventsProvider.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/EvenireDB/Persistence/EventsProvider.cs b/src/EvenireDB/Persistence/EventsProvider.cs index 58297d7..906b083 100644 --- a/src/EvenireDB/Persistence/EventsProvider.cs +++ b/src/EvenireDB/Persistence/EventsProvider.cs @@ -41,7 +41,17 @@ public async ValueTask AppendAsync( { var extentInfo = _extentInfoProvider.Get(streamId); - var inHeaders = _dataRepo.AppendAsync(extentInfo, events, cancellationToken); - await _headersRepo.AppendAsync(extentInfo, inHeaders, cancellationToken); + var semaphore = _streamLocks.GetOrAdd(streamId, _ => new SemaphoreSlim(1, 1)); + await semaphore.WaitAsync(cancellationToken); + + try + { + var inHeaders = _dataRepo.AppendAsync(extentInfo, events, cancellationToken); + await _headersRepo.AppendAsync(extentInfo, inHeaders, cancellationToken); + } + finally + { + semaphore.Release(); + } } } \ No newline at end of file