private AppendResult AppendToStreamInternal( string streamId, int expectedVersion, NewStreamMessage[] messages) { InMemoryStream inMemoryStream; if (expectedVersion == ExpectedVersion.NoStream || expectedVersion == ExpectedVersion.Any) { if (_streams.TryGetValue(streamId, out inMemoryStream)) { inMemoryStream.AppendToStream(expectedVersion, messages); } else { inMemoryStream = new InMemoryStream( streamId, _allStream, _getUtcNow, _onStreamAppended, () => _currentPosition++); inMemoryStream.AppendToStream(expectedVersion, messages); _streams.Add(streamId, inMemoryStream); } return(new AppendResult(inMemoryStream.CurrentVersion)); } if (!_streams.TryGetValue(streamId, out inMemoryStream)) { throw new WrongExpectedVersionException( ErrorMessages.AppendFailedWrongExpectedVersion(streamId, expectedVersion)); } inMemoryStream.AppendToStream(expectedVersion, messages); return(new AppendResult(inMemoryStream.CurrentVersion)); }
private void DeleteStream(string streamId, int expectedVersion) { if (!_streams.ContainsKey(streamId)) { if (expectedVersion >= 0) { throw new WrongExpectedVersionException( ErrorMessages.AppendFailedWrongExpectedVersion(streamId, expectedVersion)); } return; } if (expectedVersion != ExpectedVersion.Any && _streams[streamId].Messages.Last().StreamVersion != expectedVersion) { throw new WrongExpectedVersionException( ErrorMessages.AppendFailedWrongExpectedVersion(streamId, expectedVersion)); } InMemoryStream inMemoryStream = _streams[streamId]; _streams.Remove(streamId); inMemoryStream.DeleteAllEvents(ExpectedVersion.Any); var streamDeletedEvent = CreateStreamDeletedMessage(streamId); AppendToStreamInternal(DeletedStreamId, ExpectedVersion.Any, new[] { streamDeletedEvent }); }
protected override Task AppendToStreamInternal( string streamId, int expectedVersion, NewStreamEvent[] events, CancellationToken cancellationToken = new CancellationToken()) { if (_isDisposed) { throw new ObjectDisposedException(nameof(InMemoryEventStore)); } _lock.EnterWriteLock(); try { InMemoryStream inMemoryStream; // Should only add stream if NoStream if (expectedVersion == ExpectedVersion.NoStream || expectedVersion == ExpectedVersion.Any) { if (_streams.TryGetValue(streamId, out inMemoryStream)) { inMemoryStream.AppendToStream(expectedVersion, events); } else { inMemoryStream = new InMemoryStream( streamId, _allStream, _getUtcNow, _onStreamAppended); inMemoryStream.AppendToStream(expectedVersion, events); _streams.TryAdd(streamId, inMemoryStream); } return(Task.FromResult(0)); } if (!_streams.TryGetValue(streamId, out inMemoryStream)) { throw new WrongExpectedVersionException( Messages.AppendFailedWrongExpectedVersion(streamId, expectedVersion)); } inMemoryStream.AppendToStream(expectedVersion, events); return(Task.FromResult(0)); } finally { _lock.ExitWriteLock(); } }