/** * Callback invoked by the ClientCnxnSocket once a connection has been * established. * * @param _negotiatedSessionTimeout * @param _sessionId * @param _sessionPasswd * @param isRO * @throws IOException */ internal void onConnected(int _negotiatedSessionTimeout, long _sessionId, byte[] _sessionPasswd, bool isRO) { negotiatedSessionTimeout.Value = _negotiatedSessionTimeout; if (negotiatedSessionTimeout.Value <= 0) { state.Value = ZooKeeper.States.CLOSED; queueEvent(new WatchedEvent( Watcher.Event.EventType.None, Watcher.Event.KeeperState.Expired, null)); queueEventOfDeath(); throw new SessionExpiredException("Unable to reconnect to ZooKeeper service, session 0x" + sessionId.ToHexString() + " has expired"); } if (!readOnly && isRO) { LOG.error("Read/write client got connected to read-only server"); } readTimeout = negotiatedSessionTimeout.Value * 2 / 3; connectTimeout = negotiatedSessionTimeout.Value / hostProvider.size(); hostProvider.onConnected(); sessionId = _sessionId; sessionPasswd = _sessionPasswd; state.Value = (isRO) ? ZooKeeper.States.CONNECTEDREADONLY : ZooKeeper.States.CONNECTED; seenRwServerBefore.Value |= !isRO; LOG.info("Session establishment complete on server " + clientCnxnSocket.getRemoteSocketAddress() + ", sessionid = 0x" + sessionId.ToHexString() + ", negotiated timeout = " + negotiatedSessionTimeout.Value + (isRO ? " (READ-ONLY mode)" : "")); Watcher.Event.KeeperState eventState = (isRO) ? Watcher.Event.KeeperState.ConnectedReadOnly : Watcher.Event.KeeperState.SyncConnected; queueEvent(new WatchedEvent( Watcher.Event.EventType.None, eventState, null)); }
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 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()); }