Пример #1
0
        // Returns a query description object based on user input.
        // Including max results is optional, since we don't want to set this value for get all pages together option (the default, not GetSinglePage)
        private NodeQueryDescription GetQueryDescription(bool includeMaxResults)
        {
            var queryDescription = new NodeQueryDescription();

            if (!string.IsNullOrEmpty(this.ContinuationToken))
            {
                queryDescription.ContinuationToken = this.ContinuationToken;
            }

            var nodeStatusFilter = NodeStatusFilter.Default;

            if (this.StatusFilter.HasValue)
            {
                nodeStatusFilter = this.StatusFilter.Value;
            }

            queryDescription.NodeStatusFilter = nodeStatusFilter;

            if (!string.IsNullOrEmpty(this.NodeName))
            {
                queryDescription.NodeNameFilter = this.NodeName;
            }

            if (this.MaxResults.HasValue && includeMaxResults)
            {
                queryDescription.MaxResults = this.MaxResults.Value;
            }

            return(queryDescription);
        }
        private async Task <IList <Node> > GetNodesToRemoveAsync(
            FabricClient client,
            CancellationToken cancellationToken)
        {
            var nodesToRemove = new List <Node>();

            var queryDescription = new NodeQueryDescription();

            queryDescription.ContinuationToken = null;

            do
            {
                var nodeList = await client.QueryManager.GetNodePagedListAsync(
                    queryDescription,
                    this.nodeManagerSettings.ClientOperationTimeout,
                    cancellationToken);

                foreach (var node in nodeList)
                {
                    if (IsMyType(node))
                    {
                        // do not remove the nodes where this service is running
                        continue;
                    }

                    if (node.NodeStatus == NodeStatus.Down)
                    {
                        // is down long enough
                        if (IsDownLongEnough(node))
                        {
                            nodesToRemove.Add(node);
                        }
                    }
                }

                queryDescription.ContinuationToken = nodeList.ContinuationToken;
            } while (queryDescription.ContinuationToken != null);

            return(nodesToRemove);
        }
        private async Task <IList <Node> > GetNodesToRemoveAsync(
            FabricClient client,
            CancellationToken cancellationToken)
        {
            var nodesToRemove = new List <Node>();

            var queryDescription = new NodeQueryDescription();

            queryDescription.ContinuationToken = null;

            var nodeTypesToManage = this.nodeManagerSettings.NodeTypesToManage.Split(',').ToList();

            nodeTypesToManage = nodeTypesToManage.Select(nodeType => nodeType.Trim()).ToList();

            do
            {
                var nodeList = await client.QueryManager.GetNodePagedListAsync(
                    queryDescription,
                    this.nodeManagerSettings.ClientOperationTimeout,
                    cancellationToken);

                foreach (var node in nodeList)
                {
                    if (node.NodeStatus == NodeStatus.Down && nodeTypesToManage.Contains(node.NodeType, StringComparer.InvariantCultureIgnoreCase))
                    {
                        // is down long enough
                        if (IsDownLongEnough(node))
                        {
                            nodesToRemove.Add(node);
                        }
                    }
                }

                queryDescription.ContinuationToken = nodeList.ContinuationToken;
            } while (queryDescription.ContinuationToken != null);

            return(nodesToRemove);
        }
Пример #4
0
 public GetNodeListRequest(NodeQueryDescription queryDescription, IFabricClient fabricClient, TimeSpan timeout)
     : base(fabricClient, timeout)
 {
     this.QueryDescription = queryDescription;
 }