示例#1
0
        /// <exception cref="System.IO.IOException"/>
        private NodeStatus GetNodeStatus(int responseId)
        {
            NodeHealthStatus nodeHealthStatus = this.context.GetNodeHealthStatus();

            nodeHealthStatus.SetHealthReport(healthChecker.GetHealthReport());
            nodeHealthStatus.SetIsNodeHealthy(healthChecker.IsHealthy());
            nodeHealthStatus.SetLastHealthReportTime(healthChecker.GetLastHealthReportTime());
            if (Log.IsDebugEnabled())
            {
                Log.Debug("Node's health-status : " + nodeHealthStatus.GetIsNodeHealthy() + ", "
                          + nodeHealthStatus.GetHealthReport());
            }
            IList <ContainerStatus> containersStatuses = GetContainerStatuses();
            NodeStatus nodeStatus = NodeStatus.NewInstance(nodeId, responseId, containersStatuses
                                                           , CreateKeepAliveApplicationList(), nodeHealthStatus);

            return(nodeStatus);
        }
        public virtual void TestNodeHealthScript()
        {
            RecordFactory    factory       = RecordFactoryProvider.GetRecordFactory(null);
            NodeHealthStatus healthStatus  = factory.NewRecordInstance <NodeHealthStatus>();
            string           errorScript   = "echo ERROR\n echo \"Tracker not healthy\"";
            string           normalScript  = "echo \"I am all fine\"";
            string           timeOutScript = Shell.Windows ? "@echo off\nping -n 4 127.0.0.1 >nul\necho \"I am fine\""
                                 : "sleep 4\necho \"I am fine\"";
            Configuration conf = GetConfForNodeHealthScript();

            conf.WriteXml(new FileOutputStream(nodeHealthConfigFile));
            conf.AddResource(nodeHealthConfigFile.GetName());
            WriteNodeHealthScriptFile(normalScript, true);
            NodeHealthCheckerService nodeHealthChecker = new NodeHealthCheckerService();

            nodeHealthChecker.Init(conf);
            NodeHealthScriptRunner nodeHealthScriptRunner = nodeHealthChecker.GetNodeHealthScriptRunner
                                                                ();
            TimerTask timerTask = nodeHealthScriptRunner.GetTimerTask();

            timerTask.Run();
            SetHealthStatus(healthStatus, nodeHealthChecker.IsHealthy(), nodeHealthChecker.GetHealthReport
                                (), nodeHealthChecker.GetLastHealthReportTime());
            Log.Info("Checking initial healthy condition");
            // Check proper report conditions.
            NUnit.Framework.Assert.IsTrue("Node health status reported unhealthy", healthStatus
                                          .GetIsNodeHealthy());
            NUnit.Framework.Assert.IsTrue("Node health status reported unhealthy", healthStatus
                                          .GetHealthReport().Equals(nodeHealthChecker.GetHealthReport()));
            // write out error file.
            // Healthy to unhealthy transition
            WriteNodeHealthScriptFile(errorScript, true);
            // Run timer
            timerTask.Run();
            // update health status
            SetHealthStatus(healthStatus, nodeHealthChecker.IsHealthy(), nodeHealthChecker.GetHealthReport
                                (), nodeHealthChecker.GetLastHealthReportTime());
            Log.Info("Checking Healthy--->Unhealthy");
            NUnit.Framework.Assert.IsFalse("Node health status reported healthy", healthStatus
                                           .GetIsNodeHealthy());
            NUnit.Framework.Assert.IsTrue("Node health status reported healthy", healthStatus
                                          .GetHealthReport().Equals(nodeHealthChecker.GetHealthReport()));
            // Check unhealthy to healthy transitions.
            WriteNodeHealthScriptFile(normalScript, true);
            timerTask.Run();
            SetHealthStatus(healthStatus, nodeHealthChecker.IsHealthy(), nodeHealthChecker.GetHealthReport
                                (), nodeHealthChecker.GetLastHealthReportTime());
            Log.Info("Checking UnHealthy--->healthy");
            // Check proper report conditions.
            NUnit.Framework.Assert.IsTrue("Node health status reported unhealthy", healthStatus
                                          .GetIsNodeHealthy());
            NUnit.Framework.Assert.IsTrue("Node health status reported unhealthy", healthStatus
                                          .GetHealthReport().Equals(nodeHealthChecker.GetHealthReport()));
            // Healthy to timeout transition.
            WriteNodeHealthScriptFile(timeOutScript, true);
            timerTask.Run();
            SetHealthStatus(healthStatus, nodeHealthChecker.IsHealthy(), nodeHealthChecker.GetHealthReport
                                (), nodeHealthChecker.GetLastHealthReportTime());
            Log.Info("Checking Healthy--->timeout");
            NUnit.Framework.Assert.IsFalse("Node health status reported healthy even after timeout"
                                           , healthStatus.GetIsNodeHealthy());
            NUnit.Framework.Assert.IsTrue("Node script time out message not propogated", healthStatus
                                          .GetHealthReport().Equals(NodeHealthScriptRunner.NodeHealthScriptTimedOutMsg + NodeHealthCheckerService
                                                                    .Separator + nodeHealthChecker.GetDiskHandler().GetDisksHealthReport(false)));
        }