예제 #1
0
        static async Task TestMemLeakAsync()
        {
            var channel     = new Channel("192.168.2.13", 2379, ChannelCredentials.Insecure);
            var leaseClient = new Lease.LeaseClient(channel);

            Console.WriteLine("Start");
            Console.ReadLine();

            for (int i = 0; i < 100; i++)
            {
                var leaseGrantReq = new LeaseGrantRequest()
                {
                    TTL = 100,
                };
                var leaseGrantRes = await leaseClient.LeaseGrantAsync(leaseGrantReq, cancellationToken : channel.ShutdownToken);

                using (var leaser = leaseClient.LeaseKeepAlive(cancellationToken: channel.ShutdownToken))
                {
                    var leaseKeepAliveReq = new LeaseKeepAliveRequest()
                    {
                        ID = leaseGrantRes.ID
                    };
                    await leaser.RequestStream.WriteAsync(leaseKeepAliveReq);

                    await leaser.RequestStream.CompleteAsync();

                    while (await leaser.ResponseStream.MoveNext(channel.ShutdownToken))
                    {
                        var leaseKeepAliveRes = leaser.ResponseStream.Current;
                        if (leaseKeepAliveRes.ID == leaseKeepAliveReq.ID)
                        {
                            break;
                        }
                    }
                }
            }

            Console.WriteLine("Done");
            Console.ReadLine();

            GC.Collect();
            Console.WriteLine("GC");
            Console.ReadLine();

            await channel.ShutdownAsync();
        }
예제 #2
0
        private void Init()
        {
            try
            {
                if (_publicRootCa)
                {
                    _channel = new Channel(_host, _port, new SslCredentials());
                }
                else if (_clientSSL)
                {
                    _channel = new Channel(
                        _host,
                        _port,
                        new SslCredentials(
                            _caCert,
                            new KeyCertificatePair(_clientCert, _clientKey)
                            )
                        );
                }
                else if (_ssl)
                {
                    _channel = new Channel(_host, _port, new SslCredentials(_caCert));
                }
                else
                {
                    _channel = new Channel(_host, _port, ChannelCredentials.Insecure);
                }

                if (_basicAuth)
                {
                    Authenticate();
                }

                _kvClient          = new KV.KVClient(_channel);
                _watchClient       = new Watch.WatchClient(_channel);
                _leaseClient       = new Lease.LeaseClient(_channel);
                _lockClient        = new Lock.LockClient(_channel);
                _clusterClient     = new Cluster.ClusterClient(_channel);
                _maintenanceClient = new Maintenance.MaintenanceClient(_channel);
            }
            catch
            {
                throw;
            }
            _disposed = false;
        }