Example #1
0
        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
                        {
                        }
                    }
                };
            }
        }
Example #2
0
        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();
        }
Example #3
0
        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
                    {
                    }
                }
            };
        }
Example #4
0
        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);
            }
        }