Пример #1
0
        public static async Task EmptyLogEntry()
        {
            IPersistentState auditTrail = new ConsensusOnlyState();
            await auditTrail.AppendAsync(new EmptyLogEntry(10));

            Equal(1, auditTrail.GetLastIndex(false));
            await auditTrail.CommitAsync(1L);

            Equal(1, auditTrail.GetLastIndex(true));
            Func <IReadOnlyList <IRaftLogEntry>, long?, CancellationToken, ValueTask <Missing> > checker = static (entries, snapshotIndex, token) =>
Пример #2
0
        public static async Task RaftPersistentState()
        {
            IPersistentState auditTrail = new ConsensusOnlyState();
            await auditTrail.UpdateTermAsync(10, false);

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

            Equal(11, auditTrail.Term);
        }
Пример #3
0
        public static async Task EmptyLogEntry()
        {
            IPersistentState auditTrail = new ConsensusOnlyState();
            await auditTrail.AppendAsync(new EmptyEntry(10));

            Equal(1, auditTrail.GetLastIndex(false));
            await auditTrail.CommitAsync(1L);

            Equal(1, auditTrail.GetLastIndex(true));
            Func <IReadOnlyList <IRaftLogEntry>, long?, ValueTask> checker = (entries, snapshotIndex) =>
            {
                Equal(1, snapshotIndex);
                Equal(10, entries[0].Term);
                Equal(0, entries[0].Length);
                True(entries[0].IsReusable);
                True(entries[0].IsSnapshot);
                return(new ValueTask());
            };
            await auditTrail.ReadAsync <TestReader, DBNull>(checker, 1L);
        }
Пример #4
0
        public static async Task Appending()
        {
            IPersistentState auditTrail = new ConsensusOnlyState();

            Equal(0, auditTrail.GetLastIndex(false));
            Equal(0, auditTrail.GetLastIndex(true));
            var entry1 = new EmptyEntry(41);
            var entry2 = new EmptyEntry(42);

            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) =>
            {
                Null(snapshotIndex);
                Equal(2, entries.Count);
                Equal(41, entries[0].Term);
                False(entries[0].IsSnapshot);
                Equal(42, entries[1].Term);
                False(entries[1].IsSnapshot);
                return(default);
Пример #5
0
 private static bool IsCommitted(ConsensusOnlyState state, long index) => index <= state.commitIndex.VolatileRead();