コード例 #1
0
 /// <summary>
 /// MemberList lists all the members in the cluster
 /// </summary>
 /// <param name="request">The request to send to the server.</param>
 /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
 /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
 /// <param name="cancellationToken">An optional token for canceling the call.</param>
 /// <returns>The response received from the server.</returns>
 public MemberListResponse MemberList(MemberListRequest request, Grpc.Core.Metadata headers = null,
                                      DateTime?deadline = null,
                                      CancellationToken cancellationToken = default)
 {
     return(CallEtcd((connection) => connection.clusterClient
                     .MemberList(request, headers, deadline, cancellationToken)));
 }
コード例 #2
0
 /// <summary>
 /// MemberListAsync lists all the members in the cluster in async
 /// </summary>
 /// <param name="request">The request to send to the server.</param>
 /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
 /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
 /// <param name="cancellationToken">An optional token for canceling the call.</param>
 /// <returns>The response received from the server.</returns>
 public async Task <MemberListResponse> MemberListAsync(MemberListRequest request,
                                                        Grpc.Core.Metadata headers          = null, DateTime?deadline = null,
                                                        CancellationToken cancellationToken = default)
 {
     return(await CallEtcdAsync(async (connection) => await connection.clusterClient
                                .MemberListAsync(request, headers, deadline, cancellationToken)));
 }
コード例 #3
0
        /// <summary>
        /// MemberListAsync lists all the members in the cluster in async
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <MemberListResponse> MemberListAsync(MemberListRequest request, Grpc.Core.Metadata headers = null)
        {
            MemberListResponse response = new MemberListResponse();
            bool success    = false;
            int  retryCount = 0;

            while (!success)
            {
                try
                {
                    response = await _balancer.GetConnection().clusterClient.MemberListAsync(request, headers);

                    success = true;
                }
                catch (RpcException ex) when(ex.StatusCode == StatusCode.Unavailable)
                {
                    retryCount++;
                    if (retryCount >= _balancer._numNodes)
                    {
                        throw ex;
                    }
                }
            }
            return(response);
        }
コード例 #4
0
        public void DescribeCluster()
        {
            var request = new MemberListRequest();
            var result  = _client.MemberList(request);

            Assert.NotZero(result.Members.Count);
        }
コード例 #5
0
        public MemberListResponse MemberUpdate(MemberListRequest request)
        {
            var req = request.ToProto();
            var rsp = client.MemberList(req);

            return(rsp.FromProto());
        }
コード例 #6
0
        /// <summary>
        /// MemberList lists all the members in the cluster
        /// </summary>
        /// <param name="request">The request to send to the server.</param>
        /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
        /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
        /// <param name="cancellationToken">An optional token for canceling the call.</param>
        /// <returns>The response received from the server.</returns>
        public MemberListResponse MemberList(MemberListRequest request, Grpc.Core.Metadata headers = null,
                                             DateTime?deadline = null,
                                             CancellationToken cancellationToken = default)
        {
            MemberListResponse response = new MemberListResponse();
            bool success    = false;
            int  retryCount = 0;

            while (!success)
            {
                try
                {
                    response = _balancer.GetConnection().clusterClient
                               .MemberList(request, headers, deadline, cancellationToken);
                    success = true;
                }
                catch (RpcException ex) when(ex.StatusCode == StatusCode.Unavailable)
                {
                    retryCount++;
                    if (retryCount >= _balancer._numNodes)
                    {
                        throw;
                    }
                }
            }

            return(response);
        }
コード例 #7
0
        /// <summary>
        /// MemberList lists all the members in the cluster
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public MemberListResponse MemberList(MemberListRequest request, Metadata headers = null)
        {
            MemberListResponse response = new MemberListResponse();

            response = _balancer.GetConnection().clusterClient.MemberList(request, headers);

            return(response);
        }
コード例 #8
0
        /// <summary>
        /// MemberListAsync lists all the members in the cluster in async
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <MemberListResponse> MemberListAsync(MemberListRequest request, Metadata headers = null)
        {
            MemberListResponse response = new MemberListResponse();

            response = await _balancer.GetConnection().clusterClient.MemberListAsync(request, headers);

            return(response);
        }
コード例 #9
0
ファイル: clusterClient.cs プロジェクト: llkey221/dotnet-etcd
        /// <summary>
        /// MemberListAsync lists all the members in the cluster in async
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <MemberListResponse> MemberListAsync(MemberListRequest request)
        {
            MemberListResponse response = new MemberListResponse();

            try
            {
                response = await _clusterClient.MemberListAsync(request, _headers);
            }
            catch (RpcException ex)
            {
                ResetConnection(ex);
                throw;
            }
            catch
            {
                throw;
            }
            return(response);
        }
コード例 #10
0
ファイル: clusterClient.cs プロジェクト: llkey221/dotnet-etcd
        /// <summary>
        /// MemberList lists all the members in the cluster
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public MemberListResponse MemberList(MemberListRequest request)
        {
            MemberListResponse response = new MemberListResponse();

            try
            {
                response = _clusterClient.MemberList(request, _headers);
            }
            catch (RpcException ex)
            {
                ResetConnection(ex);
                throw;
            }
            catch
            {
                throw;
            }
            return(response);
        }
コード例 #11
0
        /// <summary>
        /// 更新集群列表
        /// </summary>
        /// <param name="client"></param>
        private void UpdateCluster(EtcdClient client)
        {
            MemberListRequest request = new MemberListRequest();
            var rsp = client.MemberList(request);

            if (dic.ContainsKey(rsp.Header.ClusterId))
            {
                Health health = dic[rsp.Header.ClusterId];
                health.Clients.Add(client);
                health.Urls.Urls.Clear();
                foreach (var kv in rsp.Members)
                {
                    EtcdClientUrls urls = new EtcdClientUrls();
                    foreach (var c in kv.ClientURLs)
                    {
                        urls.Urls.Add(c);
                    }
                    health.Urls = urls;
                }
                health.Clients.Add(client);
            }
        }
コード例 #12
0
        public async Task <string> ListAllMembersInCluster()
        {
            MemberListRequest request = new MemberListRequest();

            etcdClient.MemberList(request);

            // Sync
            //MemberListResponse res = etcdClient.MemberList(request);

            // Async
            MemberListResponse res = await etcdClient.MemberListAsync(request);

            JsonMemberList = JsonConvert.SerializeObject(res);



            // Do something with response
            //foreach (var member in res.Members)
            //{
            //    WriteLine($"member.ID: {member.ID} - member.Name: {member.Name} - member.PeerURLs :{member.PeerURLs} - member.ClientURLs: { member.ClientURLs}");
            //}

            return(JsonMemberList);
        }
コード例 #13
0
        /// <summary>
        /// 保持服务活动
        /// </summary>
        /// <param name="client">客户端</param>
        /// <param name="key">服务Key</param>
        /// <param name="ttl">服务更新时间</param>
        /// <param name="ID">申请ID</param>
        public async Task AddKeepAliveAsync(EtcdClient client, string key, long ttl, long ID)
        {
            //获取集群列表

            MemberListRequest request = new MemberListRequest();
            var rsp = await client.MemberListAsync(request);

            if (minTTL > ttl)
            {
                if (minTTL == DefaultTTL)
                {
                    //第一次修改
                    ExecuteTiks = (DefaultTTL - ttl) * STicks;//需要提前时间
                }
                else
                {
                    //需要提前的时间减去已经运行的时间
                    ExecuteTiks = (minTTL - ttl) * STicks - (LastKeep - DateTime.Now.Ticks);
                }
                FulshTicks = FulshTicks - ExecuteTiks; //针对上次运行任务还剩余的时间
                minTTL     = ttl;
                isUpdate   = false;                    //无法正常允许了
            }
            if (!dic.ContainsKey(rsp.Header.ClusterId))
            {
                Health health = new Health
                {
                    Clients = new List <EtcdClient>(),
                    KeyTTL  = new Dictionary <string, long>(),

                    LastKeep = new Dictionary <string, long>(),
                    LeaseID  = new Dictionary <string, long>()
                };
                foreach (var kv in rsp.Members)
                {
                    EtcdClientUrls urls = new EtcdClientUrls();
                    foreach (var c in kv.ClientURLs)
                    {
                        urls.Urls.Add(c);
                    }
                    health.Urls = urls;
                }
                //
                health.Clients.Add(client);
                health.KeyTTL[key]        = ttl;
                health.LeaseID[key]       = ID;
                health.LastKeep[key]      = DateTime.Now.Ticks;
                dic[rsp.Header.ClusterId] = health;
                Console.WriteLine("加入刷新");
            }
            else
            {
                Health health = dic[rsp.Header.ClusterId];
                lock (health)
                {
                    health.Clients.Add(client);
                    health.KeyTTL[key]   = ttl;
                    health.LastKeep[key] = DateTime.Now.Ticks;
                    health.LeaseID[key]  = ID;
                }
            }
        }