コード例 #1
0
        public async Task testTwoConsequitiveCallsToNextReturnDifferentElement()
        {
            HostProvider hostProvider = getHostProvider(2);
            await hostProvider.next(0);

            Assert.assertNotEquals((await hostProvider.next(0)).ToString(), (await hostProvider.next(0)).ToString());
        }
コード例 #2
0
        public async Task testNextGoesRound()
        {
            HostProvider hostProvider = getHostProvider(2);
            var          first        = await hostProvider.next(0);

            await hostProvider.next(0);

            Assert.assertEquals(first, await hostProvider.next(0));
        }
コード例 #3
0
        public async Task testOnConnectDoesNotReset()
        {
            HostProvider hostProvider = getHostProvider(2);
            var          first        = await hostProvider.next(0);

            hostProvider.onConnected();
            var second = await hostProvider.next(0);

            Assert.assertNotEquals(first, second);
        }
コード例 #4
0
        public async Task testNextGoesRound()
        {
            HostProvider hostProvider = getHostProvider(1);
            await hostProvider.next(0);

            var first = await hostProvider.next(0);

            var second = await hostProvider.next(0);

            Xunit.Assert.Equal(first, second);
        }
コード例 #5
0
        public override async Task OnRequestAsync(ApiRequestContext context)
        {
            await Task.CompletedTask;
            IServiceProvider sp           = context.HttpContext.ServiceProvider;
            HostProvider     hostProvider = sp.GetRequiredService <HostProvider>();
            //服务名也可以在接口配置时挂在Properties中
            string host = hostProvider.ResolveService(this.Name);
            HttpApiRequestMessage requestMessage = context.HttpContext.RequestMessage;

            //和原有的Uri组合并覆盖原有Uri
            //并非一定要这样实现,只要覆盖了RequestUri,即完成了替换
            requestMessage.RequestUri = requestMessage.MakeRequestUri(new Uri(host));
        }
コード例 #6
0
        public async Task testResetAfterConnectPutsFirst()
        {
            HostProvider hostProvider = getHostProvider(20);
            await hostProvider.next(0);

            var endpoint = await hostProvider.next(0);

            hostProvider.onConnected();
            for (int i = 0; i < 19; i++)
            {
                await hostProvider.next(0);
            }
            Assert.assertEquals(endpoint.ToString(), (await hostProvider.next(0)).ToString());
        }
コード例 #7
0
ファイル: ClientCnxn.cs プロジェクト: withlin/zookeeper
        /**
         * Creates a connection object. The actual network connect doesn't get
         * established until needed. The start() instance method must be called
         * subsequent to construction.
         *
         * @param chrootPath - the chroot of this client. Should be removed from this Class in ZOOKEEPER-838
         * @param hostProvider
         *            the list of ZooKeeper servers to connect to
         * @param sessionTimeout
         *            the timeout for connections.
         * @param zooKeeper
         *            the zookeeper object that this connection is related to.
         * @param watcher watcher for this connection
         * @param clientCnxnSocket
         *            the socket implementation used (e.g. NIO/Netty)
         * @param sessionId
         *            session id if re-establishing session
         * @param sessionPasswd
         *            session passwd if re-establishing session
         * @param canBeReadOnly
         *            whether the connection is allowed to go to read-only mode in
         *            case of partitioning
         * @throws IOException
         */

        internal ClientCnxn(string chrootPath, HostProvider hostProvider, int sessionTimeout, ZooKeeper zooKeeper,
                            ClientWatchManager watcher,
                            long sessionId, byte[] sessionPasswd, bool canBeReadOnly)
        {
            this.zooKeeper      = zooKeeper;
            this.watcher        = watcher;
            this.sessionId      = sessionId;
            this.sessionPasswd  = sessionPasswd;
            this.sessionTimeout = sessionTimeout;
            this.hostProvider   = hostProvider;
            this.chrootPath     = chrootPath;
            readTimeout         = sessionTimeout * 2 / 3;
            readOnly            = canBeReadOnly;
            clientCnxnSocket    = new ClientCnxnSocketNIO(this);
            state.Value         = (int)ZooKeeper.States.CONNECTING;
        }
コード例 #8
0
        protected override void ConnectImplement()
        {
            if (HostProvider.Hosts.Count == 0)
            {
                return;
            }

            if (RetriedConnectTimes >= MaxTriedConnectTimes)
            {
                OnNeedReconnected();
                return;
            }

            var serverAddressPair = HostProvider.Current;

            if (serverAddressPair == null)
            {
                RetriedConnectTimes++;
                HostProvider.ResetIndex();
                return;
            }

            bool isSuccess = true;

            if (!IsEnableProxy)
            {
                isSuccess = ConnectDirect(serverAddressPair);
            }
            else
            {
                isSuccess = ConnectThroughProxy(serverAddressPair);
            }

            if (isSuccess)
            {
                ConnectionState     = TelegramSocketConnectionState.Connected;
                RetriedConnectTimes = 0;
                return;
            }

            ConnectionState = TelegramSocketConnectionState.Disconnected;
            RetriedConnectTimes++;
            HostProvider.MoveNext();

            OnErrorOccured();
        }
コード例 #9
0
        public override Task OnRequestAsync(ApiRequestContext context)
        {
            var options = context.HttpContext.HttpApiOptions;

            //获取注册时为服务配置的服务名
            options.Properties.TryGetValue("serviceName", out object serviceNameObj);
            string                serviceName    = serviceNameObj as string;
            IServiceProvider      sp             = context.HttpContext.ServiceProvider;
            HostProvider          hostProvider   = sp.GetRequiredService <HostProvider>();
            string                host           = hostProvider.ResolveService(serviceName);
            HttpApiRequestMessage requestMessage = context.HttpContext.RequestMessage;

            //和原有的Uri组合并覆盖原有Uri
            //并非一定要这样实现,只要覆盖了RequestUri,即完成了替换
            requestMessage.RequestUri = requestMessage.MakeRequestUri(new Uri(host));
            return(Task.CompletedTask);
        }
コード例 #10
0
        public async Task testNextDoesNotSleepForZero()
        {
            byte         size         = 2;
            HostProvider hostProvider = getHostProvider(size);

            while (size > 0)
            {
                await hostProvider.next(0);

                --size;
            }
            long start = TimeHelper.ElapsedMiliseconds;
            await hostProvider.next(0);

            long stop = TimeHelper.ElapsedMiliseconds;

            Assert.assertTrue(5 > stop - start);
        }
コード例 #11
0
        public async Task testNextGoesRoundAndSleeps()
        {
            byte         size         = 2;
            HostProvider hostProvider = getHostProvider(size);

            while (size > 0)
            {
                await hostProvider.next(0);

                --size;
            }
            long start = TimeHelper.ElapsedMiliseconds;
            await hostProvider.next(1000);

            long stop = TimeHelper.ElapsedMiliseconds;

            Assert.assertTrue(900 <= stop - start);
        }
コード例 #12
0
        public async Task TestFirstAndSecondAreSame()
        {
            HostProvider hostProvider = getHostProvider(20);

            Assert.assertEquals((await hostProvider.next(0)).ToString(), (await hostProvider.next(0)).ToString());
        }
コード例 #13
0
 public BucketContext(int nbRetry)
 {
     NbRetry = nbRetry;
     Hosts   = new HostProvider();
     Sockets = new SocketFactory(Hosts);
 }