Beispiel #1
0
        public override async Task ExecuteAsync(Guid activityId)
        {
            RepairActionTypeEnum?action = repairActionProvider.GetRepairAction(repairTask.Action);

            if (action == null)
            {
                this.Environment.DefaultTraceType.WriteInfo("Repair task {0}: ignoring unknown action {1}", repairTask.TaskId, repairTask.Action);
                return;
            }

            // Ignore requests for anything other than a single node
            IList <string> targetNodeNames = repairTask.GetTargetNodeNames();

            if (targetNodeNames == null || targetNodeNames.Count != 1)
            {
                this.Environment.DefaultTraceType.WriteInfo("Repair task {0}: ignoring bad target description {1}", repairTask.TaskId, repairTask.Target);
                return;
            }

            // Map Service Fabric node name to Azure role instance Id
            string targetRoleInstance = targetNodeNames[0].TranslateNodeNameToRoleInstance();

            // TODO cancel task if its action/target is bad

            await policyAgentClient.RequestRepairAsync(
                activityId,
                new RepairRequest
            {
                Action         = action.Value,
                ContextId      = repairTask.GetTenantJobContext(),
                RoleInstanceId = targetRoleInstance,
            },
                CancellationToken.None).ConfigureAwait(false);
        }
        public static bool IsContextIdMatch(this IRepairTask repairTask, ITenantJob tenantJob)
        {
            repairTask.Validate("repairTask");
            tenantJob.Validate("tenantJob");

            var  contextId      = repairTask.GetTenantJobContext();
            bool contextIdMatch = string.Equals(contextId, tenantJob.ContextStringGivenByTenant, StringComparison.OrdinalIgnoreCase);

            return(contextIdMatch);
        }