protected EventRecord WriteSingleEvent(string eventStreamName,
                                               long eventNumber,
                                               string data,
                                               DateTime?timestamp = null,
                                               Guid eventId       = default(Guid),
                                               bool retryOnFail   = false,
                                               string eventType   = "some-type")
        {
            _streamNameIndex.GetOrAddId(eventStreamName, out var eventStreamId, out _, out _);
            var prepare = LogRecord.SingleWrite(_recordFactory, WriterCheckpoint.ReadNonFlushed(),
                                                eventId == default(Guid) ? Guid.NewGuid() : eventId,
                                                Guid.NewGuid(),
                                                eventStreamId,
                                                eventNumber - 1,
                                                eventType,
                                                Helper.UTF8NoBom.GetBytes(data),
                                                null,
                                                timestamp);
            long pos;

            if (!retryOnFail)
            {
                Assert.IsTrue(Writer.Write(prepare, out pos));
            }
            else
            {
                long firstPos = prepare.LogPosition;
                if (!Writer.Write(prepare, out pos))
                {
                    prepare = LogRecord.SingleWrite(_recordFactory, pos,
                                                    prepare.CorrelationId,
                                                    prepare.EventId,
                                                    prepare.EventStreamId,
                                                    prepare.ExpectedVersion,
                                                    prepare.EventType,
                                                    prepare.Data,
                                                    prepare.Metadata,
                                                    prepare.TimeStamp);
                    if (!Writer.Write(prepare, out pos))
                    {
                        Assert.Fail("Second write try failed when first writing prepare at {0}, then at {1}.", firstPos,
                                    prepare.LogPosition);
                    }
                }
            }

            var commit = LogRecord.Commit(WriterCheckpoint.ReadNonFlushed(), prepare.CorrelationId, prepare.LogPosition,
                                          eventNumber);

            Assert.IsTrue(Writer.Write(commit, out pos));
            Assert.AreEqual(eventStreamId, prepare.EventStreamId);

            var eventRecord = new EventRecord(eventNumber, prepare, eventStreamName);

            return(eventRecord);
        }
示例#2
0
        public bool GetOrAddId(string streamName, out long streamId, out long createdId, out string createdName)
        {
            if (SystemStreams.IsMetastream(streamName))
            {
                streamName = SystemStreams.OriginalStreamOf(streamName);
                var ret = GetOrAddId(streamName, out streamId, out createdId, out createdName);
                streamId = _metastreams.MetaStreamOf(streamId);
                return(ret);
            }

            if (LogV3SystemStreams.TryGetVirtualStreamId(streamName, out streamId))
            {
                createdId   = default;
                createdName = default;
                return(true);
            }

            return(_wrapped.GetOrAddId(streamName, out streamId, out createdId, out createdName));
        }
示例#3
0
 public bool GetOrAddId(string streamName, out TStreamId streamId, out TStreamId createdId, out string createdName) =>
 _streamNameIndex.GetOrAddId(streamName, out streamId, out createdId, out createdName);