public void NodeIsDeregisteredAfterTimeout() { uint communicationTimeout = 1; uint checkInterval = 1; var stopwatch = new Stopwatch(); var deregistrationEventLock = new AutoResetEvent(false); _overseer = new ComponentOverseer(communicationTimeout, checkInterval); _overseer.Deregistration += (o, e) => { deregistrationEventLock.Set(); }; _overseer.StartMonitoring(); var solvableProblems = new List <string> { "dvrp" }; ComponentInfo computationalNode = new SolverNodeInfo(ComponentType.ComputationalNode, solvableProblems, 5); _overseer.TryRegister(computationalNode); stopwatch.Start(); Assert.IsTrue(_overseer.IsRegistered(computationalNode.ComponentId.Value)); deregistrationEventLock.WaitOne(1000 * (int)(communicationTimeout + checkInterval + 1)); stopwatch.Stop(); Assert.IsFalse(_overseer.IsRegistered(computationalNode.ComponentId.Value)); Assert.IsTrue((ulong)stopwatch.ElapsedMilliseconds >= communicationTimeout); _overseer.StopMonitoring(); }
public void NodeIsDeregisteredAfterTimeout() { uint communicationTimeout = 1; uint checkInterval = 1; var stopwatch = new Stopwatch(); var deregistrationEventLock = new AutoResetEvent(false); _overseer = new ComponentOverseer(communicationTimeout, checkInterval); _overseer.Deregistration += (o, e) => { deregistrationEventLock.Set(); }; _overseer.StartMonitoring(); var solvableProblems = new List<string> {"dvrp"}; ComponentInfo computationalNode = new SolverNodeInfo(ComponentType.ComputationalNode, solvableProblems, 5); _overseer.TryRegister(computationalNode); stopwatch.Start(); Assert.IsTrue(_overseer.IsRegistered(computationalNode.ComponentId.Value)); deregistrationEventLock.WaitOne(1000*(int) (communicationTimeout + checkInterval + 1)); stopwatch.Stop(); Assert.IsFalse(_overseer.IsRegistered(computationalNode.ComponentId.Value)); Assert.IsTrue((ulong) stopwatch.ElapsedMilliseconds >= communicationTimeout); _overseer.StopMonitoring(); }
public void AllTypesOfNodesAreProperlyRegistered() { _overseer = new ComponentOverseer(5, 5); var solvableProblems = new List <string> { "dvrp" }; var serverInfo = new ServerInfo { IpAddress = "127.0.0.1", Port = 9135 }; ComponentInfo taskManager = new SolverNodeInfo(ComponentType.TaskManager, solvableProblems, 5); ComponentInfo computationalNode = new SolverNodeInfo(ComponentType.ComputationalNode, solvableProblems, 5); ComponentInfo backupServer = new BackupServerInfo(serverInfo, 5); Assert.IsNull(taskManager.ComponentId); Assert.IsNull(computationalNode.ComponentId); Assert.IsNull(backupServer.ComponentId); _overseer.TryRegister(taskManager); _overseer.TryRegister(computationalNode); _overseer.TryRegister(backupServer); Assert.IsTrue(_overseer.IsRegistered(taskManager.ComponentId.Value)); Assert.IsTrue(_overseer.IsRegistered(computationalNode.ComponentId.Value)); Assert.IsTrue(_overseer.IsRegistered(backupServer.ComponentId.Value)); }
public void AllTypesOfNodesAreProperlyRegistered() { _overseer = new ComponentOverseer(5, 5); var solvableProblems = new List<string> {"dvrp"}; var serverInfo = new ServerInfo { IpAddress = "127.0.0.1", Port = 9135 }; ComponentInfo taskManager = new SolverNodeInfo(ComponentType.TaskManager, solvableProblems, 5); ComponentInfo computationalNode = new SolverNodeInfo(ComponentType.ComputationalNode, solvableProblems, 5); ComponentInfo backupServer = new BackupServerInfo(serverInfo, 5); Assert.IsNull(taskManager.ComponentId); Assert.IsNull(computationalNode.ComponentId); Assert.IsNull(backupServer.ComponentId); _overseer.TryRegister(taskManager); _overseer.TryRegister(computationalNode); _overseer.TryRegister(backupServer); Assert.IsTrue(_overseer.IsRegistered(taskManager.ComponentId.Value)); Assert.IsTrue(_overseer.IsRegistered(computationalNode.ComponentId.Value)); Assert.IsTrue(_overseer.IsRegistered(backupServer.ComponentId.Value)); }
public MessageProcessorTests() { var serializer = new MessageSerializer(); var validator = new MessageValidator(); _marshaller = new Marshaller(serializer, validator); _overseer = new ComponentOverseer(5, 1); _workManager = new WorkManager(_overseer); _processor = new MessageProcessor(_overseer, _workManager); }
/// <summary> /// Creates CommunicationServer instance. /// </summary> /// <param name="config">Server configuration.</param> public CommunicationServer(ServerConfig config) { // TODO Communication server should be a backup by default. Some work is needed here. Config = config; _componentOverseer = new ComponentOverseer(Config.CommunicationTimeout, ComponentOverseerCheckInterval); _workManager = new WorkManager(_componentOverseer); _msgProcessor = new MessageProcessor(_componentOverseer, _workManager); _tcpServer = new TcpServer(Config.Address, _msgProcessor); }
/// <summary> /// Creates WorkManager instance. /// </summary> /// <param name="componentOverseer">Component overseer managing components of whom work is scheduled.</param> public WorkManager(IComponentOverseer componentOverseer) { if (componentOverseer == null) { throw new ArgumentNullException(); } _componentOverseer = componentOverseer; _componentOverseer.Deregistration += OnComponentDeregistration; _problems = new Dictionary <ulong, Problem>(); _solutions = new Dictionary <ulong, Solution>(); _partialProblems = new Dictionary <Tuple <ulong, ulong>, PartialProblem>(); _partialSolutions = new Dictionary <Tuple <ulong, ulong>, PartialSolution>(); }
/// <summary> /// Creates MessageProcessor instance. /// </summary> /// <param name="componentOverseer">Component overseer module.</param> /// <param name="workManager">Work manager to get work from.</param> public MessageProcessor(IComponentOverseer componentOverseer, IWorkManager workManager) { if (componentOverseer == null) throw new ArgumentNullException("IComponentOverseer dependancy is null."); if (workManager == null) throw new ArgumentNullException("IWorkManager dependancy is null."); _inputDataQueue = new RawDataQueue(); var serializer = new MessageSerializer(); var validator = new MessageValidator(); _marshaller = new Marshaller(serializer, validator); _componentOverseer = componentOverseer; _workManager = workManager; _processingLock = new AutoResetEvent(false); }
/// <summary> /// Creates MessageProcessor instance. /// </summary> /// <param name="componentOverseer">Component overseer module.</param> /// <param name="workManager">Work manager to get work from.</param> public MessageProcessor(IComponentOverseer componentOverseer, IWorkManager workManager) { if (componentOverseer == null) { throw new ArgumentNullException("IComponentOverseer dependancy is null."); } if (workManager == null) { throw new ArgumentNullException("IWorkManager dependancy is null."); } _inputDataQueue = new RawDataQueue(); var serializer = new MessageSerializer(); var validator = new MessageValidator(); _marshaller = new Marshaller(serializer, validator); _componentOverseer = componentOverseer; _workManager = workManager; _processingLock = new AutoResetEvent(false); }