public LmdbPersisterTests() { _directory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); _persister = new LmdbPersister(_directory); _writer = new StreamWriter(new FileStream($"trace_{_correlationId}.log", FileMode.OpenOrCreate)) { AutoFlush = true }; if (OutputTraceLog) { TheTrace.Tracer = (level, s, os) => { lock (_lock) { var message = $"{DateTime.Now.ToString("yyyy-MM-dd:HH-mm-ss.fff")}\t{_correlationId}\t{level}\t{(os.Length == 0 ? s : string.Format(s, os))}"; try { _writer.WriteLine(message); } catch { } } }; } }
public void StateStoreAndRetrieveWorksLikeACharm() { var state = new PersistentState() { CurrentTerm = 42L }; _persister.Save(state); var persister = new LmdbPersister(_directory); var st2 = persister.Load(); Assert.Equal(state.CurrentTerm, st2.CurrentTerm); Assert.Equal(state.Id, st2.Id); Assert.Equal(state.LastVotedForId, st2.LastVotedForId); persister.Dispose(); }
public DefaultRaftServerTests(ITestOutputHelper output) { _output = output; _settings = new RaftServerSettings(); _settings.ElectionTimeoutMin = _settings.ElectionTimeoutMax = _settings.CandidacyTimeout = TimeSpan.FromMilliseconds(200); _directory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); _sister = new LmdbPersister(_directory); _manijer = new Mock <IPeerManager>(); _maqina = new Mock <IStateMachine>(); _mockPeer = new Mock <IRaftServer>(); _writer = new StreamWriter(new FileStream($"trace_{_correlationId}.log", FileMode.OpenOrCreate)) { AutoFlush = true }; TheTrace.Tracer = (level, s, os) => { lock (_lock) { var message = $"{DateTime.Now.ToString("yyyy-MM-dd:HH-mm-ss.fff")}\t{_correlationId}\t{level}\t{(os.Length == 0 ? s : string.Format(s, os))}"; try { if (OutputTraceLog) { _writer.WriteLine(message); } if (ConsoleTraceLog) { _output.WriteLine(message); } } catch { } } }; }
private void SetupNodes() { foreach (var address in _addresses) { TheTrace.TraceInformation($"Setting up {address} ({_peers[address].ShortName}) {_peers[address].Id}"); var lp = new LmdbPersister(_folders[address], seedId: _peers[address].Id) { Name = _peers[address].ShortName }; var peers = _peers.Where(x => x.Key != address).Select(x => x.Value).ToArray(); foreach (var p in peers) { TheTrace.TraceInformation($"{p.Address} - ({p.ShortName}) {p.Id}"); } TheTrace.TraceInformation("___________________________________________________________________________"); var peerManager = new PeerManager(peers, _nodes); var node = new DefaultRaftServer(lp, lp, lp, new SimpleDictionaryStateMachine(), peerManager, _settings, _peers[address], chaos: new SimpleChaos(TimeSpan.FromMilliseconds(200), exceptionProbability: 0.0)); _nodes.Add(address, node); } }