예제 #1
0
        /**
         * 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));
        }
예제 #2
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);
        }
예제 #3
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());
        }