internal void primeConnection() { LOG.info("Socket connection established to " + clientCnxnSocket.getRemoteSocketAddress() + ", initiating session"); isFirstConnect = false; long sessId = (seenRwServerBefore.Value) ? sessionId : 0; ConnectRequest conReq = new ConnectRequest(0, lastZxid.Value, sessionTimeout, sessId, sessionPasswd); lock (outgoingQueue) { // We add backwards since we are pushing into the front // Only send if there's a pending watch // TODO: here we have the only remaining use of zooKeeper in // this class. It's to be eliminated! if (!disableAutoWatchReset) { List <string> dataWatches = zooKeeper.getDataWatches(); List <string> existWatches = zooKeeper.getExistWatches(); List <string> childWatches = zooKeeper.getChildWatches(); if (dataWatches.Count > 0 || existWatches.Count > 0 || childWatches.Count > 0) { SetWatches sw = new SetWatches(lastZxid.Value, prependChroot(dataWatches), prependChroot(existWatches), prependChroot(childWatches)); RequestHeader h = new RequestHeader(); h.set_Type((int)ZooDefs.OpCode.setWatches); h.setXid(-8); Packet packet = new Packet(h, new ReplyHeader(), sw, null, null); outgoingQueue.AddFirst(packet); } } foreach (AuthData id in authInfo) { outgoingQueue.AddFirst(new Packet(new RequestHeader(-4, (int)ZooDefs.OpCode.auth), null, new AuthPacket(0, id.scheme, id.data), null, null)); } outgoingQueue.AddFirst(new Packet(null, null, conReq, null, null, readOnly)); } clientCnxnSocket.enableReadWriteOnly(); if (LOG.isDebugEnabled()) { LOG.debug("Session establishment request sent on " + clientCnxnSocket.getRemoteSocketAddress()); } }
internal void primeConnection() { LOG.info("Socket connection established to " + clientCnxnSocket.getRemoteSocketAddress() + ", initiating session"); isFirstConnect = false; long sessId = (seenRwServerBefore.Value) ? sessionId : 0; ConnectRequest conReq = new ConnectRequest(0, lastZxid.Value, sessionTimeout, sessId, sessionPasswd); lock (outgoingQueue) { // We add backwards since we are pushing into the front // Only send if there's a pending watch // TODO: here we have the only remaining use of zooKeeper in // this class. It's to be eliminated! List <string> dataWatches = zooKeeper.getDataWatches(); List <string> existWatches = zooKeeper.getExistWatches(); List <string> childWatches = zooKeeper.getChildWatches(); long setWatchesLastZxid = lastZxid.Value; bool done = false; if (dataWatches.Count > 0 || existWatches.Count > 0 || childWatches.Count > 0) { using (var dataWatchesIter = prependChroot(dataWatches).GetEnumerator()) using (var existWatchesIter = prependChroot(existWatches).GetEnumerator()) using (var childWatchesIter = prependChroot(childWatches).GetEnumerator()) while (!done) { var dataWatchesBatch = new List <string>(); var existWatchesBatch = new List <string>(); var childWatchesBatch = new List <string>(); int batchLength = 0; // Note, we may exceed our max length by a bit when we add the last // watch in the batch. This isn't ideal, but it makes the code simpler. while (batchLength < SET_WATCHES_MAX_LENGTH) { string watch; if (dataWatchesIter.MoveNext()) { watch = dataWatchesIter.Current; dataWatchesBatch.Add(watch); } else if (existWatchesIter.MoveNext()) { watch = existWatchesIter.Current; existWatchesBatch.Add(watch); } else if (childWatchesIter.MoveNext()) { watch = childWatchesIter.Current; childWatchesBatch.Add(watch); } else { done = true; break; } batchLength += watch.Length; } SetWatches sw = new SetWatches(setWatchesLastZxid, dataWatchesBatch, existWatchesBatch, childWatchesBatch); RequestHeader h = new RequestHeader(); h.set_Type((int)ZooDefs.OpCode.setWatches); h.setXid(-8); Packet packet = new Packet(h, new ReplyHeader(), sw, null, null); outgoingQueue.AddFirst(packet); } } foreach (AuthData id in authInfo) { outgoingQueue.AddFirst(new Packet(new RequestHeader(-4, (int)ZooDefs.OpCode.auth), null, new AuthPacket(0, id.scheme, id.data), null, null)); } outgoingQueue.AddFirst(new Packet(null, null, conReq, null, null, readOnly)); } clientCnxnSocket.enableReadWriteOnly(); if (LOG.isDebugEnabled()) { LOG.debug("Session establishment request sent on " + clientCnxnSocket.getRemoteSocketAddress()); } }