fix(raft): address WAL code quality issues — CRC perf, DRY, safety, assertions
- SyncAsync: remove redundant FlushAsync, use single Flush(flushToDisk:true) - ComputeCrc: use incremental Crc32.Append to avoid contiguous buffer heap allocation - Load: cast pos+length to long to guard against int overflow in bounds check - AppendAsync: delegate to WriteEntryTo (DRY — eliminates duplicated record-building logic) - Load: extract ParseEntries static helper to eliminate goto pattern with early returns - Entries: change return type from IEnumerable to IReadOnlyList for index access and Count property - RaftNode.PersistAsync: remove redundant term.txt write (meta.json now owns term+votedFor) - RaftWalTests: tighten ShouldBeGreaterThanOrEqualTo(1) -> ShouldBe(1) in truncation/CRC tests; use .Count property directly on IReadOnlyList instead of .Count() LINQ extension
This commit is contained in:
@@ -610,7 +610,6 @@ public sealed class RaftNode : IDisposable
|
||||
var dir = _persistDirectory ?? Path.Combine(Path.GetTempPath(), "natsdotnet-raft", Id);
|
||||
Directory.CreateDirectory(dir);
|
||||
await Log.PersistAsync(Path.Combine(dir, "log.json"), ct);
|
||||
await File.WriteAllTextAsync(Path.Combine(dir, "term.txt"), TermState.CurrentTerm.ToString(), ct);
|
||||
await File.WriteAllTextAsync(Path.Combine(dir, "applied.txt"), AppliedIndex.ToString(), ct);
|
||||
|
||||
// Persist term and VotedFor together in meta.json for atomic durable state.
|
||||
|
||||
Reference in New Issue
Block a user