Пример #1
0
        public static async Task Appending()
        {
            IPersistentState auditTrail = new InMemoryAuditTrail();

            Equal(0, auditTrail.GetLastIndex(false));
            Equal(0, auditTrail.GetLastIndex(true));
            var entry1 = new TestLogEntry("SET X=0")
            {
                Term = 1
            };
            var entry2 = new TestLogEntry("SET Y=0")
            {
                Term = 2
            };

            Equal(1, await auditTrail.AppendAsync(new LogEntryList(entry1, entry2)));
            Equal(0, auditTrail.GetLastIndex(true));
            Equal(2, auditTrail.GetLastIndex(false));
            Func <IReadOnlyList <IRaftLogEntry>, long?, ValueTask> checker = (entries, snapshotIndex) =>
            {
                Equal(2, entries.Count);
                var e1 = (TestLogEntry)entries[0];
                var e2 = (TestLogEntry)entries[1];
                Equal("SET X=0", e1.Content);
                Equal("SET Y=0", e2.Content);
                return(default);
Пример #2
0
        public static async Task RaftPersistentState()
        {
            IPersistentState auditTrail = new InMemoryAuditTrail();

            NotNull(auditTrail.First);
            Equal(0, auditTrail.First.Term);
            await auditTrail.UpdateTermAsync(10);

            Equal(10, auditTrail.Term);
            await auditTrail.IncrementTermAsync();

            Equal(11, auditTrail.Term);
        }
Пример #3
0
        public static async Task Appending()
        {
            IPersistentState auditTrail = new InMemoryAuditTrail();

            Equal(0, auditTrail.GetLastIndex(false));
            Equal(0, auditTrail.GetLastIndex(true));
            var entry1 = new LogEntry("SET X=0")
            {
                Term = 1
            };
            var entry2 = new LogEntry("SET Y=0")
            {
                Term = 2
            };

            Equal(1, await auditTrail.AppendAsync(new[] { entry1, entry2 }));
            Equal(0, auditTrail.GetLastIndex(true));
            Equal(2, auditTrail.GetLastIndex(false));
            var entries = await auditTrail.GetEntriesAsync(1, 2);

            Equal(2, entries.Count);
            entry1 = (LogEntry)entries[0];
            entry2 = (LogEntry)entries[1];
            Equal("SET X=0", entry1.Content);
            Equal("SET Y=0", entry2.Content);
            //now replace entry at index 2 with new entry
            entry2 = new LogEntry("ADD")
            {
                Term = 3
            };
            Equal(2, await auditTrail.AppendAsync(new[] { entry2 }, 2));
            entries = await auditTrail.GetEntriesAsync(1, 2);

            Equal(2, entries.Count);
            entry1 = (LogEntry)entries[0];
            entry2 = (LogEntry)entries[1];
            Equal("SET X=0", entry1.Content);
            Equal("ADD", entry2.Content);
            Equal(2, auditTrail.GetLastIndex(false));
            Equal(0, auditTrail.GetLastIndex(true));
            //commit all entries
            using (var detector = new CommitDetector())
            {
                auditTrail.Committed += detector.OnCommitted;
                Equal(2, await auditTrail.CommitAsync(1));
                await detector.Wait();

                Equal(2, auditTrail.GetLastIndex(true));
                Equal(2, detector.Count);
            }
        }
Пример #4
0
 private void Invoke(InMemoryAuditTrail auditTrail) => auditTrail?.Committed?.Invoke(auditTrail, startIndex, count);