public void Can_store_discovery_nodes() { var persistedNodes = _storage.GetPersistedNodes(); Assert.AreEqual(0, persistedNodes.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 managers = nodes.Select(CreateLifecycleManager).ToArray(); var networkNodes = managers.Select(x => new NetworkNode(x.ManagedNode.Id.PublicKey, x.ManagedNode.Host, x.ManagedNode.Port, x.ManagedNode.Description, x.NodeStats.NewPersistedNodeReputation)).ToArray(); _storage.StartBatch(); _storage.UpdateNodes(networkNodes); _storage.Commit(); persistedNodes = _storage.GetPersistedNodes(); foreach (INodeLifecycleManager manager in managers) { NetworkNode persistedNode = persistedNodes.FirstOrDefault(x => x.NodeId.Equals(manager.ManagedNode.Id)); Assert.IsNotNull(persistedNode); Assert.AreEqual(manager.ManagedNode.Port, persistedNode.Port); Assert.AreEqual(manager.ManagedNode.Host, persistedNode.Host); Assert.AreEqual(manager.ManagedNode.Description, persistedNode.Description); Assert.AreEqual(manager.NodeStats.CurrentNodeReputation, persistedNode.Reputation); } _storage.StartBatch(); _storage.RemoveNodes(new[] { networkNodes.First() }); _storage.Commit(); persistedNodes = _storage.GetPersistedNodes(); foreach (INodeLifecycleManager manager in managers.Take(1)) { NetworkNode persistedNode = persistedNodes.FirstOrDefault(x => x.NodeId.Equals(manager.ManagedNode.Id)); Assert.IsNull(persistedNode); } foreach (INodeLifecycleManager manager in managers.Skip(1)) { NetworkNode persistedNode = persistedNodes.FirstOrDefault(x => x.NodeId.Equals(manager.ManagedNode.Id)); Assert.IsNotNull(persistedNode); Assert.AreEqual(manager.ManagedNode.Port, persistedNode.Port); Assert.AreEqual(manager.ManagedNode.Host, persistedNode.Host); Assert.AreEqual(manager.ManagedNode.Description, persistedNode.Description); Assert.AreEqual(manager.NodeStats.CurrentNodeReputation, persistedNode.Reputation); } }
private void RunPeerCommit() { try { UpdateReputationAndMaxPeersCount(); if (!_peerStorage.AnyPendingChange()) { // if (_logger.IsTrace) _logger.Trace("No changes in peer storage, skipping commit."); return; } _storageCommitTask = Task.Run(() => { _peerStorage.Commit(); _peerStorage.StartBatch(); }); var task = _storageCommitTask.ContinueWith(x => { if (x.IsFaulted && _logger.IsError) { _logger.Error($"Error during peer storage commit: {x.Exception}"); } }); task.Wait(); _storageCommitTask = null; } catch (Exception ex) { _logger.Error($"Error during peer storage commit: {ex}"); } }
private async Task RunDiscoveryCommit() { var managers = _discoveryManager.GetNodeLifecycleManagers(); //we need to update all notes to update reputation _discoveryStorage.UpdateNodes(managers.Select(x => new NetworkNode(x.ManagedNode.Id.PublicKey, x.ManagedNode.Host, x.ManagedNode.Port, x.ManagedNode.Description, x.NodeStats.NewPersistedNodeReputation)).ToArray()); if (!_discoveryStorage.AnyPendingChange()) { if (_logger.IsTrace) { _logger.Trace("No changes in discovery storage, skipping commit."); } return; } _storageCommitTask = Task.Run(() => { _discoveryStorage.Commit(); _discoveryStorage.StartBatch(); }); await _storageCommitTask; _storageCommitTask = null; }
private void RunDiscoveryCommit() { try { IReadOnlyCollection <INodeLifecycleManager> managers = _discoveryManager.GetNodeLifecycleManagers(); //we need to update all notes to update reputation _discoveryStorage.UpdateNodes(managers.Select(x => new NetworkNode(x.ManagedNode.Id, x.ManagedNode.Host, x.ManagedNode.Port, x.NodeStats.NewPersistedNodeReputation)).ToArray()); if (!_discoveryStorage.AnyPendingChange()) { if (_logger.IsTrace) { _logger.Trace("No changes in discovery storage, skipping commit."); } return; } _storageCommitTask = Task.Run(() => { _discoveryStorage.Commit(); _discoveryStorage.StartBatch(); }); Task task = _storageCommitTask.ContinueWith(x => { if (x.IsFaulted && _logger.IsError) { _logger.Error($"Error during discovery commit: {x.Exception}"); } }); task.Wait(); _storageCommitTask = null; } catch (Exception ex) { _logger.Error($"Error during discovery commit: {ex}"); } }