protected override async Task SetStreamMetadataInternal( string streamId, int expectedStreamMetadataVersion, int?maxAge, int?maxCount, string metadataJson, CancellationToken cancellationToken) { using (_lock.UseWriteLock()) { string metaStreamId = $"$${streamId}"; var metadataMessage = new MetadataMessage { StreamId = streamId, MaxAge = maxAge, MaxCount = maxCount, MetaJson = metadataJson }; var json = SimpleJson.SerializeObject(metadataMessage); var newmessage = new NewStreamMessage(Guid.NewGuid(), "$stream-metadata", json); AppendToStreamInternal(metaStreamId, expectedStreamMetadataVersion, new[] { newmessage }); await CheckStreamMaxCount(streamId, metadataMessage.MaxCount, cancellationToken); } }
protected override async Task <SetStreamMetadataResult> SetStreamMetadataInternal( string streamId, int expectedStreamMetadataVersion, int?maxAge, int?maxCount, string metadataJson, CancellationToken cancellationToken) { using (_lock.UseWriteLock()) { string metaStreamId = $"$${streamId}"; var metadataMessage = new MetadataMessage { StreamId = streamId, MaxAge = maxAge, MaxCount = maxCount, MetaJson = metadataJson }; var json = SimpleJson.SerializeObject(metadataMessage); var messageId = MetadataMessageIdGenerator.Create(metaStreamId, expectedStreamMetadataVersion, json); var newStreamMessage = new NewStreamMessage(messageId, "$stream-metadata", json); var result = AppendToStreamInternal(metaStreamId, expectedStreamMetadataVersion, new[] { newStreamMessage }); await CheckStreamMaxCount(streamId, metadataMessage.MaxCount, cancellationToken); return(new SetStreamMetadataResult(result.CurrentVersion)); } }
protected override async Task <SetStreamMetadataResult> SetStreamMetadataInternal( string streamId, int expectedStreamMetadataVersion, int?maxAge, int?maxCount, string metadataJson, CancellationToken cancellationToken) { MsSqlAppendResult result; using (var connection = _createConnection()) { var streamIdInfo = new StreamIdInfo(streamId); await connection.OpenAsync(cancellationToken).NotOnCapturedContext(); using (var transaction = connection.BeginTransaction()) { var metadataMessage = new MetadataMessage { StreamId = streamId, MaxAge = maxAge, MaxCount = maxCount, MetaJson = metadataJson }; var json = SimpleJson.SerializeObject(metadataMessage); var messageId = MetadataMessageIdGenerator.Create( streamId, expectedStreamMetadataVersion, json); var newmessage = new NewStreamMessage(messageId, "$stream-metadata", json); result = await AppendToStreamInternal( connection, transaction, streamIdInfo.MetadataSqlStreamId, expectedStreamMetadataVersion, new[] { newmessage }, cancellationToken); using (var command = new SqlCommand(_scripts.SetStreamMetadata, connection, transaction)) { command.Parameters.AddWithValue("streamId", streamIdInfo.SqlStreamId.Id); command.Parameters.AddWithValue("streamIdOriginal", streamIdInfo.SqlStreamId.IdOriginal); command.Parameters.Add("maxAge", SqlDbType.Int); command.Parameters["maxAge"].Value = maxAge ?? -1; command.Parameters.Add("maxCount", SqlDbType.Int); command.Parameters["maxCount"].Value = maxCount ?? -1; await command.ExecuteNonQueryAsync(cancellationToken); } transaction.Commit(); } } await CheckStreamMaxCount(streamId, maxCount, cancellationToken); return(new SetStreamMetadataResult(result.CurrentVersion)); }
protected override async Task <SetStreamMetadataResult> SetStreamMetadataInternal( string streamId, int expectedStreamMetadataVersion, int?maxAge, int?maxCount, string metadataJson, CancellationToken cancellationToken) { MsSqlAppendResult result; using (var connection = _createConnection()) { await connection.OpenAsync(cancellationToken).NotOnCapturedContext(); using (var transaction = connection.BeginTransaction()) { var streamIdInfo = new StreamIdInfo(streamId); var metadataMessage = new MetadataMessage { StreamId = streamId, MaxAge = maxAge, MaxCount = maxCount, MetaJson = metadataJson }; var json = SimpleJson.SerializeObject(metadataMessage); var messageId = MetadataMessageIdGenerator.Create( streamIdInfo.MetadataSqlStreamId.IdOriginal, expectedStreamMetadataVersion, json); var message = new NewStreamMessage(messageId, "$stream-metadata", json); result = await AppendToStreamInternal( connection, transaction, streamIdInfo.MetadataSqlStreamId, expectedStreamMetadataVersion, new[] { message }, cancellationToken); transaction.Commit(); } } await CheckStreamMaxCount(streamId, maxCount, cancellationToken); return(new SetStreamMetadataResult(result.CurrentVersion)); }
public static NpgsqlParameter MetadataStreamMessage( PostgresqlStreamId streamId, int expectedVersion, MetadataMessage value) { var jsonData = SimpleJson.SerializeObject(value); return(new NpgsqlParameter <PostgresNewStreamMessage> { TypedValue = PostgresNewStreamMessage.FromNewStreamMessage( new NewStreamMessage( MetadataMessageIdGenerator.Create(streamId.IdOriginal, expectedVersion, jsonData), "$stream-metadata", jsonData)) }); }
protected override async Task <SetStreamMetadataResult> SetStreamMetadataInternal( string streamId, int expectedStreamMetadataVersion, int?maxAge, int?maxCount, string metadataJson, CancellationToken cancellationToken) { int currentVersion; var metadata = new MetadataMessage { StreamId = streamId, MaxAge = maxAge, MaxCount = maxCount, MetaJson = metadataJson }; var streamIdInfo = new StreamIdInfo(streamId); using (var connection = await OpenConnection(cancellationToken)) using (var transaction = connection.BeginTransaction()) using (var command = BuildFunctionCommand( _schema.SetStreamMetadata, transaction, Parameters.StreamId(streamIdInfo.PostgresqlStreamId), Parameters.StreamIdOriginal(streamIdInfo.PostgresqlStreamId), Parameters.MetadataStreamId(streamIdInfo.MetadataPosgresqlStreamId), Parameters.MetadataStreamIdOriginal(streamIdInfo.MetadataPosgresqlStreamId), Parameters.OptionalMaxAge(metadata.MaxAge), Parameters.OptionalMaxCount(metadata.MaxCount), Parameters.ExpectedVersion(expectedStreamMetadataVersion), Parameters.CreatedUtc(_settings.GetUtcNow?.Invoke()), Parameters.MetadataStreamMessage( streamIdInfo.MetadataPosgresqlStreamId, expectedStreamMetadataVersion, metadata))) { currentVersion = (int)await command.ExecuteScalarAsync(cancellationToken).NotOnCapturedContext(); await transaction.CommitAsync(cancellationToken).NotOnCapturedContext(); } await TryScavenge(streamIdInfo, cancellationToken); return(new SetStreamMetadataResult(currentVersion)); }
protected override async Task <SetStreamMetadataResult> SetStreamMetadataInternal( string streamId, int expectedStreamMetadataVersion, int?maxAge, int?maxCount, string metadataJson, CancellationToken cancellationToken) { Tuple <int?, int> result; using (var connection = _createConnection()) { await connection.OpenAsync(cancellationToken); using (var transaction = connection.BeginTransaction()) { var streamIdInfo = new StreamIdInfo(streamId); var metadataMessage = new MetadataMessage { StreamId = streamId, MaxAge = maxAge, MaxCount = maxCount, MetaJson = metadataJson }; var json = SimpleJson.SerializeObject(metadataMessage); var newmessage = new NewStreamMessage(Guid.NewGuid(), "$stream-metadata", json); result = await AppendToStreamInternal( connection, transaction, streamIdInfo.MetadataSqlStreamId, expectedStreamMetadataVersion, new[] { newmessage }, cancellationToken); transaction.Commit(); } } await CheckStreamMaxCount(streamId, maxCount, cancellationToken); return(new SetStreamMetadataResult(result.Item2)); //Item2 = CurrentVersion }
protected override async Task <SetStreamMetadataResult> SetStreamMetadataInternal( string streamId, int expectedVersion, int?maxAge, int?maxCount, string metadataJson, CancellationToken cancellationToken) { GuardAgainstDisposed(); cancellationToken.ThrowIfCancellationRequested(); var metadataMessage = new MetadataMessage { StreamId = streamId, MaxAge = maxAge, MaxCount = maxCount, MetaJson = metadataJson }; var json = SimpleJson.SerializeObject(metadataMessage); var messageId = MetadataMessageIdGenerator.Create( streamId, expectedVersion, json ); var message = new NewStreamMessage(messageId, "$stream-metadata", json); var idinfo = new StreamIdInfo(streamId); var result = await AppendToStreamInternal( idinfo.MetadataSqlStreamId.IdOriginal, expectedVersion, new[] { message }, cancellationToken).NotOnCapturedContext(); CheckStreamMaxCount(streamId, maxCount, cancellationToken).Wait(cancellationToken); return(new SetStreamMetadataResult(result.CurrentVersion)); }
protected override async Task <SetStreamMetadataResult> SetStreamMetadataInternal( string streamId, int expectedStreamMetadataVersion, int?maxAge, int?maxCount, string metadataJson, CancellationToken cancellationToken) { var metadata = new MetadataMessage { StreamId = streamId, MaxAge = maxAge, MaxCount = maxCount, MetaJson = metadataJson }; var metadataMessageJsonData = SimpleJson.SerializeObject(metadata); var streamIdInfo = new StreamIdInfo(streamId); var currentVersion = Parameters.CurrentVersion(); try { using (var connection = await OpenConnection(cancellationToken)) using (var transaction = await connection.BeginTransactionAsync(cancellationToken).ConfigureAwait(false)) using (var command = BuildStoredProcedureCall( _schema.SetStreamMetadata, transaction, Parameters.StreamId(streamIdInfo.MySqlStreamId), Parameters.MetadataStreamId(streamIdInfo.MetadataMySqlStreamId), Parameters.MetadataStreamIdOriginal(streamIdInfo.MetadataMySqlStreamId), Parameters.OptionalMaxAge(metadata.MaxAge), Parameters.OptionalMaxCount(metadata.MaxCount), Parameters.ExpectedVersion(expectedStreamMetadataVersion), Parameters.CreatedUtc(_settings.GetUtcNow?.Invoke()), Parameters.MetadataMessageMessageId( streamIdInfo.MetadataMySqlStreamId, expectedStreamMetadataVersion, metadataMessageJsonData), Parameters.MetadataMessageType(), Parameters.MetadataMessageJsonData(metadataMessageJsonData), currentVersion, Parameters.CurrentPosition())) { await command.ExecuteNonQueryAsync(cancellationToken).NotOnCapturedContext(); await transaction.CommitAsync(cancellationToken).NotOnCapturedContext(); } await TryScavenge(streamIdInfo, cancellationToken); return(new SetStreamMetadataResult((int)currentVersion.Value)); } catch (MySqlException ex) when(ex.IsWrongExpectedVersion()) { throw new WrongExpectedVersionException( ErrorMessages.AppendFailedWrongExpectedVersion( streamIdInfo.MetadataMySqlStreamId.IdOriginal, expectedStreamMetadataVersion), streamIdInfo.MetadataMySqlStreamId.IdOriginal, ExpectedVersion.Any, ex); } }