Esempio n. 1
0
        public void every_prepare_can_be_commited()
        {
            var res = ReadIndex.CheckCommitStartingAt(_prepare0.LogPosition, WriterCheckpoint.ReadNonFlushed());

            Assert.AreEqual(CommitDecision.Ok, res.Decision);
            Assert.AreEqual("ES", res.EventStreamId);
            Assert.AreEqual(-1, res.CurrentVersion);
            Assert.AreEqual(-1, res.StartEventNumber);
            Assert.AreEqual(-1, res.EndEventNumber);

            res = ReadIndex.CheckCommitStartingAt(_prepare1.LogPosition, WriterCheckpoint.ReadNonFlushed());

            Assert.AreEqual(CommitDecision.Ok, res.Decision);
            Assert.AreEqual("ES", res.EventStreamId);
            Assert.AreEqual(-1, res.CurrentVersion);
            Assert.AreEqual(-1, res.StartEventNumber);
            Assert.AreEqual(-1, res.EndEventNumber);

            res = ReadIndex.CheckCommitStartingAt(_prepare2.LogPosition, WriterCheckpoint.ReadNonFlushed());

            Assert.AreEqual(CommitDecision.Ok, res.Decision);
            Assert.AreEqual("ES", res.EventStreamId);
            Assert.AreEqual(-1, res.CurrentVersion);
            Assert.AreEqual(-1, res.StartEventNumber);
            Assert.AreEqual(-1, res.EndEventNumber);
        }
Esempio n. 2
0
        protected override void WriteTestScenario()
        {
            // Stream that will be kept
            _event1 = WriteSingleEventWithLogVersion0(Guid.NewGuid(), _eventStreamId, WriterCheckpoint.ReadNonFlushed(),
                                                      0);
            _event2 = WriteSingleEventWithLogVersion0(Guid.NewGuid(), _eventStreamId, WriterCheckpoint.ReadNonFlushed(),
                                                      1);

            // Stream that will be deleted
            WriteSingleEventWithLogVersion0(Guid.NewGuid(), _deletedEventStreamId, WriterCheckpoint.ReadNonFlushed(),
                                            0);
            WriteSingleEventWithLogVersion0(Guid.NewGuid(), _deletedEventStreamId, WriterCheckpoint.ReadNonFlushed(),
                                            1);
            _deleted = WriteSingleEventWithLogVersion0(Guid.NewGuid(), _deletedEventStreamId,
                                                       WriterCheckpoint.ReadNonFlushed(), int.MaxValue - 1,
                                                       PrepareFlags.StreamDelete | PrepareFlags.TransactionBegin | PrepareFlags.TransactionEnd);

            // Stream that will be kept
            _event3 = WriteSingleEventWithLogVersion0(Guid.NewGuid(), _eventStreamId, WriterCheckpoint.ReadNonFlushed(),
                                                      2);
            _event4 = WriteSingleEventWithLogVersion0(Guid.NewGuid(), _eventStreamId, WriterCheckpoint.ReadNonFlushed(),
                                                      3);

            Writer.CompleteChunk();

            Scavenge(completeLast: false, mergeChunks: true);
        }
Esempio n. 3
0
        protected override void WriteTestScenario()
        {
            long   pos;
            string stream = "ES";

            _streamNameIndex.GetOrAddId(stream, out var streamId, out _, out _);

            var prepare1 = LogRecord.SingleWrite(_recordFactory, WriterCheckpoint.ReadNonFlushed(),             // prepare1
                                                 Guid.NewGuid(),
                                                 Guid.NewGuid(),
                                                 streamId,
                                                 -1,
                                                 "some-type",
                                                 LogRecord.NoData,
                                                 null,
                                                 DateTime.UtcNow);

            Assert.IsTrue(Writer.Write(prepare1, out pos));

            var prepare2 = LogRecord.SingleWrite(_recordFactory, WriterCheckpoint.ReadNonFlushed(),             // prepare2
                                                 Guid.NewGuid(),
                                                 Guid.NewGuid(),
                                                 streamId,
                                                 -1,
                                                 "some-type",
                                                 LogRecord.NoData,
                                                 null,
                                                 DateTime.UtcNow);

            Assert.IsTrue(Writer.Write(prepare2, out pos));


            var deletePrepare = LogRecord.DeleteTombstone(_recordFactory, WriterCheckpoint.ReadNonFlushed(),             // delete prepare
                                                          Guid.NewGuid(), Guid.NewGuid(), streamId, -1);

            _deleteTombstone = new EventRecord(EventNumber.DeletedStream, deletePrepare, stream);
            Assert.IsTrue(Writer.Write(deletePrepare, out pos));

            var prepare3 = LogRecord.SingleWrite(_recordFactory, WriterCheckpoint.ReadNonFlushed(),             // prepare3
                                                 Guid.NewGuid(),
                                                 Guid.NewGuid(),
                                                 streamId,
                                                 -1,
                                                 "some-type",
                                                 LogRecord.NoData,
                                                 null,
                                                 DateTime.UtcNow);

            Assert.IsTrue(Writer.Write(prepare3, out pos));

            var commit = LogRecord.Commit(WriterCheckpoint.ReadNonFlushed(),             // committing delete
                                          deletePrepare.CorrelationId,
                                          deletePrepare.LogPosition,
                                          EventNumber.DeletedStream);

            Assert.IsTrue(Writer.Write(commit, out pos));
        }
Esempio n. 4
0
        public void check_commmit_on_not_expected_prepare_should_return_wrong_expected_version()
        {
            var res = ReadIndex.CheckCommitStartingAt(_prepare4.LogPosition, WriterCheckpoint.ReadNonFlushed());

            Assert.AreEqual(CommitDecision.WrongExpectedVersion, res.Decision);
            Assert.AreEqual("ES", res.EventStreamId);
            Assert.AreEqual(2, res.CurrentVersion);
            Assert.AreEqual(-1, res.StartEventNumber);
            Assert.AreEqual(-1, res.EndEventNumber);
        }
Esempio n. 5
0
        public void check_commmit_on_2nd_prepare_should_return_ok_decision()
        {
            var res = ReadIndex.CheckCommitStartingAt(_prepare1.LogPosition, WriterCheckpoint.ReadNonFlushed());

            Assert.AreEqual(CommitDecision.Ok, res.Decision);
            Assert.AreEqual("ES", res.EventStreamId);
            Assert.AreEqual(0, res.CurrentVersion);
            Assert.AreEqual(-1, res.StartEventNumber);
            Assert.AreEqual(-1, res.EndEventNumber);
        }
        protected override void WriteTestScenario()
        {
            _event0 = WriteSingleEvent("ES", 0, "bla1");

            var  prepare = LogRecord.DeleteTombstone(WriterCheckpoint.ReadNonFlushed(), Guid.NewGuid(), Guid.NewGuid(), "ES", 1);
            long pos;

            Assert.IsTrue(Writer.Write(prepare, out pos));

            _event1 = WriteSingleEvent("ES", 1, "bla1");
        }
        protected override void WriteTestScenario()
        {
            _event0 = WriteSingleEvent("ES", 0, "bla1");
            _streamNameIndex.GetOrAddId("ES", out var esStreamId, out _, out _);
            var prepare = LogRecord.DeleteTombstone(_recordFactory, WriterCheckpoint.ReadNonFlushed(), Guid.NewGuid(), Guid.NewGuid(),
                                                    esStreamId, 1);
            long pos;

            Assert.IsTrue(Writer.Write(prepare, out pos));

            _event1 = WriteSingleEvent("ES", 1, "bla1");
        }
        public void check_commmit_should_return_ok_decision()
        {
            var res = ReadIndex.IndexWriter.CheckCommitStartingAt(_prepare.LogPosition,
                                                                  WriterCheckpoint.ReadNonFlushed());

            _streamNameIndex.GetOrAddId("ES", out var streamId, out _, out _);

            Assert.AreEqual(CommitDecision.Ok, res.Decision);
            Assert.AreEqual(streamId, res.EventStreamId);
            Assert.AreEqual(-1, res.CurrentVersion);
            Assert.AreEqual(-1, res.StartEventNumber);
            Assert.AreEqual(-1, res.EndEventNumber);
        }
Esempio n. 9
0
        protected override void WriteTestScenario()
        {
            _event0 = WriteSingleEvent("ES", 0, "bla1");

            var prepare = LogRecord.DeleteTombstone(_recordFactory, WriterCheckpoint.ReadNonFlushed(), Guid.NewGuid(), Guid.NewGuid(),
                                                    "ES", 2);
            long pos;

            Assert.IsTrue(Writer.Write(prepare, out pos));

            _event1 = WriteSingleEvent("ES", 1, "bla1");
            Scavenge(completeLast: false, mergeChunks: false);
        }
        public void check_commmit_should_return_ok_decision()
        {
            var res = ReadIndex.IndexWriter.CheckCommitStartingAt(_prepare.LogPosition,
                                                                  WriterCheckpoint.ReadNonFlushed());

            var streamId = _logFormat.StreamIds.LookupValue("ES");

            Assert.AreEqual(CommitDecision.Ok, res.Decision);
            Assert.AreEqual(streamId, res.EventStreamId);
            Assert.AreEqual(-1, res.CurrentVersion);
            Assert.AreEqual(-1, res.StartEventNumber);
            Assert.AreEqual(-1, res.EndEventNumber);
        }
        protected override void WriteTestScenario()
        {
            var firstEvent = WriteSingleEvent(_allowedStream1, 1, new string('.', 3000), eventId: Guid.NewGuid(),
                                              eventType: "event-type-1", retryOnFail: true);

            WriteSingleEvent(_disallowedStream, 1, new string('.', 3000), eventId: Guid.NewGuid(), eventType: "event-type-2",
                             retryOnFail: true);    //disallowed
            WriteSingleEvent(_allowedStream2, 1, new string('.', 3000), eventId: Guid.NewGuid(), eventType: "event-type-3",
                             retryOnFail: true);    //allowed

            _forwardReadPos  = new TFPos(firstEvent.LogPosition, firstEvent.LogPosition);
            _backwardReadPos = new TFPos(WriterCheckpoint.ReadNonFlushed(), WriterCheckpoint.ReadNonFlushed());
        }
        protected override void WriteTestScenario()
        {
            _survivors = new List <ILogRecord>();
            _scavenged = new List <ILogRecord>();

            GetOrReserve("s1", out var s1StreamId, out _);
            GetOrReserveEventType("event-type", out var eventTypeId, out _);
            var transPos = WriterCheckpoint.ReadNonFlushed();

            for (int i = 0; i < 10; ++i)
            {
                long tmp;
                var  r = LogRecord.Prepare(_recordFactory, WriterCheckpoint.ReadNonFlushed(),
                                           Guid.NewGuid(),
                                           Guid.NewGuid(),
                                           transPos,
                                           i,
                                           s1StreamId,
                                           i == 0 ? -1 : -2,
                                           PrepareFlags.Data | (i == 9 ? PrepareFlags.TransactionEnd : PrepareFlags.None),
                                           eventTypeId,
                                           new byte[3],
                                           new byte[3]);
                Assert.IsTrue(Writer.Write(r, out tmp));
                Writer.CompleteChunk();

                _scavenged.Add(r);
            }

            var r2 = WriteCommit(transPos, "s1", 0);

            _survivors.Add(r2);

            Writer.CompleteChunk();

            var r3 = WriteDeletePrepare("s1");

            _survivors.Add(r3);

            Writer.CompleteChunk();

            var r4 = WriteDeleteCommit(r3);

            _survivors.Add(r4);

            Writer.CompleteChunk();

            Scavenge(completeLast: false, mergeChunks: true);

            Assert.AreEqual(13, _survivors.Count + _scavenged.Count);
        }
        protected override void WriteTestScenario()
        {
            var eventTypeId = LogFormatHelper <TLogFormat, TStreamId> .EventTypeId;

            _event0 = WriteSingleEvent("ES", 0, "bla1");
            Assert.True(_logFormat.StreamNameIndex.GetOrReserve("ES", out var esStreamId, out _, out _));
            var prepare = LogRecord.DeleteTombstone(_recordFactory, WriterCheckpoint.ReadNonFlushed(), Guid.NewGuid(), Guid.NewGuid(),
                                                    esStreamId, eventTypeId, 1);
            long pos;

            Assert.IsTrue(Writer.Write(prepare, out pos));

            _event1 = WriteSingleEvent("ES", 1, "bla1");
        }
        protected override void WriteTestScenario()
        {
            var firstEvent = WriteSingleEvent("ES1", 1, new string('.', 3000), eventId: Guid.NewGuid(),
                                              eventType: "event-type-1", retryOnFail: true);

            WriteSingleEvent("ES2", 1, new string('.', 3000), eventId: Guid.NewGuid(), eventType: "other-event-type-2",
                             retryOnFail: true);
            WriteSingleEvent("ES3", 1, new string('.', 3000), eventId: Guid.NewGuid(), eventType: "event-type-3",
                             retryOnFail: true);
            WriteSingleEvent("ES4", 1, new string('.', 3000), eventId: Guid.NewGuid(), eventType: "other-event-type-4",
                             retryOnFail: true);

            _forwardReadPos  = new TFPos(firstEvent.LogPosition, firstEvent.LogPosition);
            _backwardReadPos = new TFPos(WriterCheckpoint.ReadNonFlushed(), WriterCheckpoint.ReadNonFlushed());
        }
Esempio n. 15
0
        private void WriteV0HardDelete(string eventStreamId)
        {
            long pos;
            var  logPosition = WriterCheckpoint.ReadNonFlushed();
            var  prepare     = new PrepareLogRecord(logPosition, Guid.NewGuid(), Guid.NewGuid(), logPosition, 0, eventStreamId,
                                                    int.MaxValue - 1, DateTime.UtcNow,
                                                    PrepareFlags.StreamDelete | PrepareFlags.TransactionBegin | PrepareFlags.TransactionEnd,
                                                    SystemEventTypes.StreamDeleted, new byte[0], new byte[0], prepareRecordVersion: LogRecordVersion.LogRecordV0);

            Writer.Write(prepare, out pos);

            var commit = new CommitLogRecord(WriterCheckpoint.ReadNonFlushed(), prepare.CorrelationId, prepare.LogPosition, DateTime.UtcNow, int.MaxValue,
                                             commitRecordVersion: LogRecordVersion.LogRecordV0);

            Writer.Write(commit, out pos);
        }
        public void other_prepares_cannot_be_committed()
        {
            var res = ReadIndex.IndexWriter.CheckCommitStartingAt(_prepare0.LogPosition, WriterCheckpoint.ReadNonFlushed());

            Assert.AreEqual(CommitDecision.WrongExpectedVersion, res.Decision);
            Assert.AreEqual("ES", res.EventStreamId);
            Assert.AreEqual(0, res.CurrentVersion);
            Assert.AreEqual(-1, res.StartEventNumber);
            Assert.AreEqual(-1, res.EndEventNumber);

            res = ReadIndex.IndexWriter.CheckCommitStartingAt(_prepare2.LogPosition, WriterCheckpoint.ReadNonFlushed());

            Assert.AreEqual(CommitDecision.WrongExpectedVersion, res.Decision);
            Assert.AreEqual("ES", res.EventStreamId);
            Assert.AreEqual(0, res.CurrentVersion);
            Assert.AreEqual(-1, res.StartEventNumber);
            Assert.AreEqual(-1, res.EndEventNumber);
        }
Esempio n. 17
0
        protected override void WriteTestScenario()
        {
            var t1 = WriteTransactionBeginV0(Guid.NewGuid(), WriterCheckpoint.ReadNonFlushed(), _streamIdOne,
                                             ExpectedVersion.NoStream);
            var t2 = WriteTransactionBeginV0(Guid.NewGuid(), WriterCheckpoint.ReadNonFlushed(), _streamIdTwo,
                                             ExpectedVersion.NoStream);

            _p1 = WriteTransactionEventV0(t1.CorrelationId, WriterCheckpoint.ReadNonFlushed(), t1.LogPosition, 0,
                                          t1.EventStreamId, 0, "es1", PrepareFlags.Data);
            _p2 = WriteTransactionEventV0(t2.CorrelationId, WriterCheckpoint.ReadNonFlushed(), t2.LogPosition, 0,
                                          t2.EventStreamId, 0, "abc1", PrepareFlags.Data);
            _p3 = WriteTransactionEventV0(t1.CorrelationId, WriterCheckpoint.ReadNonFlushed(), t1.LogPosition, 1,
                                          t1.EventStreamId, 1, "es1", PrepareFlags.Data);
            _p4 = WriteTransactionEventV0(t2.CorrelationId, WriterCheckpoint.ReadNonFlushed(), t2.LogPosition, 1,
                                          t2.EventStreamId, 1, "abc1", PrepareFlags.Data);
            _p5 = WriteTransactionEventV0(t1.CorrelationId, WriterCheckpoint.ReadNonFlushed(), t1.LogPosition, 2,
                                          t1.EventStreamId, 2, "es1", PrepareFlags.Data);

            WriteTransactionEndV0(t2.CorrelationId, WriterCheckpoint.ReadNonFlushed(), t2.TransactionPosition,
                                  t2.EventStreamId);
            WriteTransactionEndV0(t1.CorrelationId, WriterCheckpoint.ReadNonFlushed(), t1.TransactionPosition,
                                  t1.EventStreamId);

            _t2CommitPos = WriteCommitV0(t2.CorrelationId, WriterCheckpoint.ReadNonFlushed(), t2.TransactionPosition,
                                         t2.EventStreamId, 0, out _postCommitPos);
            _t1CommitPos = WriteCommitV0(t1.CorrelationId, WriterCheckpoint.ReadNonFlushed(), t1.TransactionPosition,
                                         t1.EventStreamId, 0, out _postCommitPos);

            Writer.CompleteChunk();

            // Need to have a second chunk as otherwise the checkpoints will be off
            _random1 = WriteSingleEventWithLogVersion0(Guid.NewGuid(), "random-stream",
                                                       WriterCheckpoint.ReadNonFlushed(), 0);

            Scavenge(completeLast: false, mergeChunks: true);
        }
        protected override void WriteTestScenario()
        {
            long tmp;

            var r2 = LogRecord.Prepare(WriterCheckpoint.ReadNonFlushed(),
                                       Guid.NewGuid(),
                                       Guid.NewGuid(),
                                       WriterCheckpoint.ReadNonFlushed(),
                                       0,
                                       "s1",
                                       -1,
                                       PrepareFlags.Data | PrepareFlags.TransactionBegin,
                                       "event-type",
                                       new byte[3],
                                       new byte[3]);

            Assert.IsTrue(Writer.Write(r2, out tmp));

            var r4 = WritePrepare("s2", -1);
            var r5 = WriteCommit(r4.LogPosition, "s2", 0);
            var r6 = WriteDelete("s2");

            Writer.CompleteChunk();

            var r7 = LogRecord.Prepare(WriterCheckpoint.ReadNonFlushed(),
                                       Guid.NewGuid(),
                                       Guid.NewGuid(),
                                       r2.LogPosition,
                                       1,
                                       "s1",
                                       -1,
                                       PrepareFlags.Data | PrepareFlags.TransactionEnd,
                                       "event-type",
                                       new byte[3],
                                       new byte[3]);

            Assert.IsTrue(Writer.Write(r7, out tmp));

            var r9  = WritePrepare("s3", -1);
            var r10 = WriteCommit(r9.LogPosition, "s3", 0);
            var r11 = WriteDelete("s3");

            var r12 = WriteCommit(r2.LogPosition, "s1", 0);
            var r13 = WriteDelete("s1");

            Writer.CompleteChunk();

            _survivors = new[]
            {
                r6.LogPosition,
                r11.LogPosition,
                r13.LogPosition
            };
            _scavenged = new[]
            {
                r2.LogPosition,
                r4.LogPosition,
                r5.LogPosition,
                r7.LogPosition,
                r9.LogPosition,
                r10.LogPosition,
                r12.LogPosition
            };

            Scavenge(completeLast: false, mergeChunks: true);
        }