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); } }
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)); }
/// <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; }