Exemple #1
0
        private static NodeRepairImpactDescription GetImpactFromDetails(ITenantJob tenantJob, CoordinatorEnvironment environment)
        {
            environment.Validate("environment");

            var translator = new ImpactTranslator(environment);
            var impact     = new NodeRepairImpactDescription();

            if (tenantJob.JobStep == null || tenantJob.JobStep.CurrentlyImpactedRoleInstances == null)
            {
                return(impact);
            }

            foreach (var roleInstance in tenantJob.JobStep.CurrentlyImpactedRoleInstances)
            {
                string nodeName = roleInstance.RoleInstanceName.TranslateRoleInstanceToNodeName();

                NodeImpactLevel impactLevel = translator.TranslateImpactDetailToNodeImpactLevel(
                    tenantJob.ImpactDetail.ImpactAction,
                    roleInstance.ExpectedImpact);

                if (impactLevel != NodeImpactLevel.None)
                {
                    var nodeImpact = new NodeImpact(nodeName, impactLevel);
                    impact.ImpactedNodes.Add(nodeImpact);
                }
            }

            return(impact);
        }
        private void ProcessScriptLine(int lineNumber, string line)
        {
            // Comment/empty lines
            if (line.StartsWith("#") || string.IsNullOrWhiteSpace(line))
            {
                return;
            }

            // Clear configuration
            if (line.StartsWith("!clear"))
            {
                configStore.ClearKeys();
                Console.WriteLine("Config cleared");
                return;
            }

            // Set configuration
            var match = Regex.Match(line, @"^!set (?<key>[^=]+)=(?<value>.*)");

            if (match.Success)
            {
                string configKey   = match.Groups["key"].Value;
                string configValue = match.Groups["value"].Value;
                configStore.UpdateKey(ConfigSectionName, configKey, configValue);
                Console.WriteLine("Set config: {0}={1}", configKey, configValue);
                return;
            }

            // Run test case

            var fields = line.Split(',');

            var action = (ImpactActionEnum)Enum.Parse(typeof(ImpactActionEnum), fields[0]);

            var impact = new AffectedResourceImpact()
            {
                ComputeImpact                    = (Impact)Enum.Parse(typeof(Impact), fields[1]),
                DiskImpact                       = (Impact)Enum.Parse(typeof(Impact), fields[2]),
                NetworkImpact                    = (Impact)Enum.Parse(typeof(Impact), fields[3]),
                OSImpact                         = (Impact)Enum.Parse(typeof(Impact), fields[4]),
                ApplicationConfigImpact          = (Impact)Enum.Parse(typeof(Impact), fields[5]),
                EstimatedImpactDurationInSeconds = long.Parse(fields[6]),
            };

            string expectedResultString = fields[7];
            string message = string.Format("Line {0}: {1}", lineNumber, line);

            if (expectedResultString.StartsWith("!"))
            {
                AssertThrowsException <Exception>(() => translator.TranslateImpactDetailToNodeImpactLevel(action, impact), message);
            }
            else
            {
                NodeImpactLevel actualResult   = translator.TranslateImpactDetailToNodeImpactLevel(action, impact);
                NodeImpactLevel expectedResult = (NodeImpactLevel)Enum.Parse(typeof(NodeImpactLevel), expectedResultString);

                Assert.AreEqual(expectedResult, actualResult, message);
            }
        }
Exemple #3
0
        private static WinFabricNodeImpactLevel Convert(NodeImpactLevel nodeImpactLevel)
        {
            if (!Enum.IsDefined(typeof(NodeImpactLevel), nodeImpactLevel))
            {
                throw new ArgumentException("Invalid NodeImpactLevel value " + nodeImpactLevel, "nodeImpactLevel");
            }

            return((WinFabricNodeImpactLevel)nodeImpactLevel);
        }
 public CreateRepairTaskInPreparingAction(
     MachineMaintenanceRecord record,
     string serviceName,
     NodeImpactLevel impactLevel,
     bool performHealthCheck)
 {
     this.record             = record.Validate("record");
     this.serviceName        = serviceName.Validate("serviceName");
     this.impactLevel        = impactLevel;
     this.performHealthCheck = performHealthCheck;
 }
        private void EmitActionCreateRepairTaskInPreparing(MachineMaintenanceRecord record)
        {
            // TODO allow config overrides
            NodeImpactLevel impactLevel        = TranslateRepairToNodeImpact(record.RepairType);
            bool            performHealthCheck = false; // TODO

            traceType.WriteInfo(
                "Creating repair task for {0} (impact = {1}, health check = {2})",
                record.RecordId,
                impactLevel,
                performHealthCheck);

            EmitAction(new CreateRepairTaskInPreparingAction(
                           record,
                           this.serviceName,
                           impactLevel,
                           performHealthCheck));
        }
Exemple #6
0
 /// <summary>
 /// <para>Initializes a new instance of the <see cref="System.Fabric.Repair.NodeImpact" /> class.</para>
 /// </summary>
 /// <param name="nodeName">
 /// <para>The name of the impacted node.</para>
 /// </param>
 /// <param name="impactLevel">
 /// <para>The level of impact expected.</para>
 /// </param>
 public NodeImpact(string nodeName, NodeImpactLevel impactLevel)
 {
     this.NodeName    = nodeName;
     this.ImpactLevel = impactLevel;
 }