Ejemplo n.º 1
0
        // Does repairTask represent a VendorRepair, via action/impact match?
        // This is used to check if a VRE matches a particular repair task
        public static bool MatchesVendorRepairEndJob(this IRepairTask repairTask, ITenantJob tenantJob)
        {
            repairTask.Validate("repairTask");
            tenantJob.Validate("tenantJob");

            if (!repairTask.IsVendorRepair())
            {
                return(false);
            }

            // 2. check impact
            if (repairTask.Impact == null || repairTask.Impact.Kind != RepairImpactKind.Node)
            {
                return(false);
            }

            var impactedNodesFromRepairTask = ((NodeRepairImpactDescription)repairTask.Impact).ImpactedNodes;

            var impactedNodesFromTenantJob = new HashSet <string>(
                tenantJob.JobStep.CurrentlyImpactedRoleInstances.Select(i => i.RoleInstanceName.TranslateRoleInstanceToNodeName()),
                StringComparer.OrdinalIgnoreCase);

            // If all impacted nodes in this VendorRepair task are covered by the job, it's a match
            foreach (var nodeFromRepairTask in impactedNodesFromRepairTask)
            {
                if (!impactedNodesFromTenantJob.Contains(nodeFromRepairTask.NodeName))
                {
                    return(false);
                }
            }

            return(true);
        }