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)); }
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)); }