public async Task testTwoConsequitiveCallsToNextReturnDifferentElement() { HostProvider hostProvider = getHostProvider(2); await hostProvider.next(0); Assert.assertNotEquals((await hostProvider.next(0)).ToString(), (await hostProvider.next(0)).ToString()); }
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)); }
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); }
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); }
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)); }
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()); }
/** * 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; }
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(); }
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); }
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); }
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); }
public async Task TestFirstAndSecondAreSame() { HostProvider hostProvider = getHostProvider(20); Assert.assertEquals((await hostProvider.next(0)).ToString(), (await hostProvider.next(0)).ToString()); }
public BucketContext(int nbRetry) { NbRetry = nbRetry; Hosts = new HostProvider(); Sockets = new SocketFactory(Hosts); }