Exemple #1
0
        internal static int ParseLogEntryPrologue(ReadOnlySpan <byte> input, out long length, out long term, out DateTimeOffset timeStamp, out bool isSnapshot)
        {
            var reader = new SpanReader <byte>(input);

            length     = ReadInt64LittleEndian(reader.Read(sizeof(long)));
            term       = ReadInt64LittleEndian(reader.Read(sizeof(long)));
            timeStamp  = reader.Read <DateTimeOffset>();
            isSnapshot = ValueTypeExtensions.ToBoolean(reader.Read());

            return(reader.ConsumedCount);
        }
        internal static int ParseLogEntryPrologue(ReadOnlySpan <byte> input, out long length, out long term, out DateTimeOffset timeStamp, out bool isSnapshot)
        {
            length = ReadInt64LittleEndian(input);
            input  = input.Slice(sizeof(long));

            term  = ReadInt64LittleEndian(input);
            input = input.Slice(sizeof(long));

            timeStamp = Span.Read <DateTimeOffset>(ref input);

            isSnapshot = ValueTypeExtensions.ToBoolean(input[0]);

            return(sizeof(long) + sizeof(long) + Unsafe.SizeOf <DateTimeOffset>() + sizeof(byte));
        }
Exemple #3
0
            private long term, commitIndex, lastIndex, lastApplied;  // volatile

            internal NodeState(DirectoryInfo location)
            {
                mappedFile  = MemoryMappedFile.CreateFromFile(Path.Combine(location.FullName, FileName), FileMode.OpenOrCreate, null, Capacity, MemoryMappedFileAccess.ReadWrite);
                stateView   = mappedFile.CreateViewAccessor();
                term        = stateView.ReadInt64(TermOffset);
                commitIndex = stateView.ReadInt64(CommitIndexOffset);
                lastIndex   = stateView.ReadInt64(LastIndexOffset);
                lastApplied = stateView.ReadInt64(LastAppliedOffset);
                var hasLastVote = ValueTypeExtensions.ToBoolean(stateView.ReadByte(LastVotePresenceOffset));

                if (hasLastVote)
                {
                    stateView.Read(LastVoteOffset, out ClusterMemberId votedFor);
                    this.votedFor = votedFor;
                }
            }
 public override ValueTask <bool> ProcessInboundMessageAsync(PacketHeaders headers, ReadOnlyMemory <byte> payload, EndPoint endpoint, CancellationToken token)
 {
     Debug.Assert(headers.Control == FlowControl.Ack);
     TrySetResult(ValueTypeExtensions.ToBoolean(payload.Span[0]));
     return(new ValueTask <bool>(false));
 }