public void PeersReadWriteTest() { var persistedPeers = _peerStorage.GetPersistedPeers(); Assert.AreEqual(0, persistedPeers.Length); var nodes = new[] { _nodeFactory.CreateNode("192.1.1.1", 3441), _nodeFactory.CreateNode("192.1.1.2", 3442), _nodeFactory.CreateNode("192.1.1.3", 3443), _nodeFactory.CreateNode("192.1.1.4", 3444), _nodeFactory.CreateNode("192.1.1.5", 3445), }; nodes[0].Description = "Test desc"; nodes[4].Description = "Test desc 2"; var peers = nodes.Select(x => new Peer(x, new NodeStats(_configurationProvider))).ToArray(); _peerStorage.StartBatch(); _peerStorage.UpdatePeers(peers); _peerStorage.Commit(); persistedPeers = _peerStorage.GetPersistedPeers(); foreach (var peer in peers) { var persistedNode = persistedPeers.FirstOrDefault(x => x.Node.Id.Equals(peer.Node.Id)); Assert.IsNotNull(persistedNode); Assert.AreEqual(peer.Node.Port, persistedNode.Node.Port); Assert.AreEqual(peer.Node.Host, persistedNode.Node.Host); Assert.AreEqual(peer.Node.Description, persistedNode.Node.Description); Assert.AreEqual(peer.NodeStats.CurrentNodeReputation, persistedNode.PersistedReputation); } _peerStorage.StartBatch(); _peerStorage.RemovePeers(peers.Take(1).ToArray()); _peerStorage.Commit(); persistedPeers = _peerStorage.GetPersistedPeers(); foreach (var peer in peers.Take(1)) { var persistedNode = persistedPeers.FirstOrDefault(x => x.Node.Id.Equals(peer.Node.Id)); Assert.IsNull(persistedNode.Node); } foreach (var peer in peers.Skip(1)) { var persistedNode = persistedPeers.FirstOrDefault(x => x.Node.Id.Equals(peer.Node.Id)); Assert.IsNotNull(persistedNode); Assert.AreEqual(peer.Node.Port, persistedNode.Node.Port); Assert.AreEqual(peer.Node.Host, persistedNode.Node.Host); Assert.AreEqual(peer.Node.Description, persistedNode.Node.Description); Assert.AreEqual(peer.NodeStats.CurrentNodeReputation, persistedNode.PersistedReputation); } }
//TODO Timer to periodically check active peers and move new to active based on max size and compatibility - stats and capabilities + update peers in synchronization manager //TODO Remove active and synch on disconnect //TODO Update Stats on disconnect, other events //TODO update runner to run discovery public PeerManager(IRlpxPeer localPeer, IDiscoveryManager discoveryManager, ISynchronizationManager synchronizationManager, INodeStatsProvider nodeStatsProvider, IPeerStorage peerStorage, INodeFactory nodeFactory, IConfigProvider configurationProvider, IPerfService perfService, ILogManager logManager) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _localPeer = localPeer; _configurationProvider = configurationProvider.GetConfig <NetworkConfig>(); _synchronizationManager = synchronizationManager; _nodeStatsProvider = nodeStatsProvider; _discoveryManager = discoveryManager; _perfService = perfService; _nodeFactory = nodeFactory; _isDiscoveryEnabled = _discoveryManager != null; if (_isDiscoveryEnabled) { discoveryManager.NodeDiscovered += async(s, e) => await OnNodeDiscovered(s, e); } localPeer.ConnectionInitialized += OnRemoteConnectionInitialized; synchronizationManager.SyncFailed += async(s, e) => await OnSyncFailed(s, e); _peerStorage = peerStorage; _peerStorage.StartBatch(); }
private void RunPeerCommit() { if (!_peerStorage.AnyPendingChange()) { return; } _peerStorage.Commit(); _peerStorage.StartBatch(); }
//TODO Timer to periodically check active peers and move new to active based on max size and compatibility - stats and capabilities + update peers in synchronization manager //TODO Remove active and synch on disconnect //TODO Update Stats on disconnect, other events //TODO Move Discover to Network //TODO update runner to run discovery public PeerManager(IRlpxPeer localPeer, IDiscoveryManager discoveryManager, ILogger logger, IDiscoveryConfigurationProvider configurationProvider, ISynchronizationManager synchronizationManager, INodeStatsProvider nodeStatsProvider, IPeerStorage peerStorage, IPerfService perfService) { _localPeer = localPeer; _logger = logger; _configurationProvider = configurationProvider; _synchronizationManager = synchronizationManager; _nodeStatsProvider = nodeStatsProvider; _discoveryManager = discoveryManager; _perfService = perfService; _isDiscoveryEnabled = _discoveryManager != null; if (_isDiscoveryEnabled) { discoveryManager.NodeDiscovered += async(s, e) => await OnNodeDiscovered(s, e); } localPeer.ConnectionInitialized += OnRemoteConnectionInitialized; _peerStorage = peerStorage; _peerStorage.StartBatch(); }