private void StatusThreadWork(int who, IDictionary <int, ActiveComponent> activeComponents, IDictionary <int, ProblemDataSet> dataSets) { while (_doStatusWork) { var elapsed = activeComponents[who].StatusWatch.ElapsedMilliseconds; if (elapsed > Properties.Settings.Default.Timeout) { //backup timeout if (activeComponents[who].ComponentType == ComponentType.CommunicationServer) { continue; } Message deregister = new Register() { Deregister = true, DeregisterSpecified = true, Id = (ulong)who, IdSpecified = true }; SynchronizationQueue.Enqueue(deregister); Log.DebugFormat("TIMEOUT of {0}. Deregistering.", activeComponents[who].ComponentType); DataSetOps.HandleClientMalfunction(activeComponents, who, dataSets); activeComponents.Remove(who); return; } Thread.Sleep((int)Properties.Settings.Default.Timeout); } }
public void DataSetCompNodeFailureNextCompNodeWork() { var comps = new Dictionary <int, ActiveComponent>(); comps.Add(1, new ActiveComponent() { ComponentType = ComponentType.ComputationalNode, SolvableProblems = new[] { "abc" } }); comps.Add(2, new ActiveComponent() { ComponentType = ComponentType.ComputationalNode, SolvableProblems = new[] { "abc" } }); var dict = new Dictionary <int, ProblemDataSet>(); var bytes = new byte[1] { 1 }; dict.Add(1, new ProblemDataSet() { CommonData = bytes, TaskManagerId = 1, ProblemType = "abc", PartialSets = new[] { new PartialSet() { PartialProblem = new SolvePartialProblemsPartialProblem(), PartialSolution = null, Status = PartialSetStatus.Fresh } } }); var ret = DataSetOps.GetMessageForCompNode(comps, 1, dict); Assert.AreEqual(typeof(SolvePartialProblems), ret.GetType()); DataSetOps.HandleClientMalfunction(comps, 1, dict); var ret2 = DataSetOps.GetMessageForCompNode(comps, 2, dict); Assert.AreEqual(typeof(SolvePartialProblems), ret2.GetType()); var msg = ret2.Cast <SolvePartialProblems>(); Assert.AreEqual(1, msg.PartialProblems.Length); Assert.AreEqual(1, msg.CommonData.Length); Assert.AreEqual(1, msg.CommonData[0]); Assert.AreEqual(2, dict[1].PartialSets[0].NodeId); }
public void DataSetTaskManagerFailureNextTaskManagerWork() { var comps = new Dictionary <int, ActiveComponent>(); comps.Add(1, new ActiveComponent() { ComponentType = ComponentType.TaskManager, SolvableProblems = new[] { "abc" } }); comps.Add(2, new ActiveComponent() { ComponentType = ComponentType.TaskManager, SolvableProblems = new [] { "abc" } }); var dict = new Dictionary <int, ProblemDataSet>(); var bytes = new byte[1] { 1 }; dict.Add(1, new ProblemDataSet() { CommonData = bytes, TaskManagerId = 0, ProblemType = "abc" }); var ret = DataSetOps.GetMessageForTaskManager(comps, 1, dict); Assert.AreEqual(typeof(DivideProblem), ret.GetType()); DataSetOps.HandleClientMalfunction(comps, 1, dict); var ret2 = DataSetOps.GetMessageForTaskManager(comps, 2, dict); Assert.AreEqual(typeof(DivideProblem), ret2.GetType()); var msg2 = ret.Cast <DivideProblem>(); Assert.AreEqual(1, msg2.Data.Length); Assert.AreEqual(1, msg2.Data[0]); Assert.AreEqual(2, dict[1].TaskManagerId); }