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));
        }
示例#3
0
 public static MySqlParameter MetadataMessageMessageId(
     MySqlStreamId metadataMySqlStreamId,
     int expectedStreamMetadataVersion,
     string metadataMessageJsonData) => MessageIdInternal(
     MetadataMessageIdGenerator.Create(
         metadataMySqlStreamId.IdOriginal,
         expectedStreamMetadataVersion,
         metadataMessageJsonData),
     "_metadata_message_message_id");
        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));
        }
示例#5
0
        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 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));
        }