/** * Shutdown the Observer. */ public void shutdown() { LOG.info("shutdown called", new Exception("shutdown Observer")); super.shutdown(); }
@Override protected void revalidateSession(ServerCnxn cnxn, long sessionId, int sessionTimeout) throws IOException { getLearner().validateSession(cnxn, sessionId, sessionTimeout); }
public void flush() throws IOException { try { learner.writePacket(null, true); } catch(IOException e) { LOG.warn("Closing connection to leader, exception during packet send", e); try { if (!learner.sock.isClosed()) { learner.sock.close(); } } catch (IOException e1) { // Nothing to do, we are shutting things down, so an exception here is irrelevant LOG.debug("Ignoring error closing the connection", e1); } } }
this.sock = createSocket(); long startNanoTime = nanoTime(); remainingInitLimitTime = initLimitTime - (int)((nanoTime() - startNanoTime) / 1000000); if (remainingInitLimitTime <= 0) { LOG.error("initLimit exceeded on retries."); sockConnect(sock, addr, Math.min(self.tickTime * self.syncLimit, remainingInitLimitTime)); if (self.isSslQuorum()) { ((SSLSocket) sock).startHandshake(); break; } catch (IOException e) { remainingInitLimitTime = initLimitTime - (int)((nanoTime() - startNanoTime) / 1000000); ", remaining init limit=" + remainingInitLimitTime + ", connecting to " + addr,e); this.sock = createSocket();
qp.setData(bsid.toByteArray()); writePacket(qp, true); readPacket(qp); final long newEpoch = ZxidUtils.getEpochFromZxid(qp.getZxid()); if (qp.getType() == Leader.LEADERINFO) { writePacket(ackNewEpoch, true); return ZxidUtils.makeZxid(newEpoch, 0); } else {
@Test(expected=IOException.class) public void connectionRetryTimeoutTest() throws Exception { Learner learner = new TimeoutLearner(); learner.self = new QuorumPeer(); learner.self.setTickTime(2000); learner.self.setInitLimit(5); learner.self.setSyncLimit(2); // this addr won't even be used since we fake the Socket.connect InetSocketAddress addr = new InetSocketAddress(1111); // we expect this to throw an IOException since we're faking socket connect errors every time learner.connectToLeader(addr, ""); } @Test
qp.setData(bsid.toByteArray()); writePacket(qp, true); readPacket(qp); final long newEpoch = ZxidUtils.getEpochFromZxid(qp.getZxid()); if (qp.getType() == Leader.LEADERINFO) { writePacket(ackNewEpoch, true); return ZxidUtils.makeZxid(newEpoch, 0); } else {
readPacket(qp); LinkedList<Long> packetsCommitted = new LinkedList<Long>(); LinkedList<PacketInFlight> packetsNotCommitted = new LinkedList<PacketInFlight>(); readPacket(qp); switch(qp.getType()) { case Leader.PROPOSAL: writeToTxnLog = true; //Anything after this needs to go to the transaction log, not applied directly in memory isPreZAB1_0 = false; writePacket(new QuorumPacket(Leader.ACK, newLeaderZxid, null, null), true); break; writePacket(ack, true); sock.setSoTimeout(self.tickTime * self.syncLimit); zk.startup();
protected void ping(QuorumPacket qp) throws IOException { // Send back the ping with our session data ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(bos); Map<Long, Integer> touchTable = zk.getTouchSnapshot(); for (Entry<Long, Integer> entry : touchTable.entrySet()) { dos.writeLong(entry.getKey()); dos.writeInt(entry.getValue()); } qp.setData(bos.toByteArray()); writePacket(qp, true); }
@Override public void shutdown() { LOG.info("shutdown called", new Exception("shutdown Follower")); super.shutdown(); } }
@Override protected void revalidateSession(ServerCnxn cnxn, long sessionId, int sessionTimeout) throws IOException { if (upgradeableSessionTracker.isLocalSession(sessionId)) { super.revalidateSession(cnxn, sessionId, sessionTimeout); } else { getLearner().validateSession(cnxn, sessionId, sessionTimeout); } }
readPacket(qp); LinkedList<Long> packetsCommitted = new LinkedList<Long>(); LinkedList<PacketInFlight> packetsNotCommitted = new LinkedList<PacketInFlight>(); readPacket(qp); switch(qp.getType()) { case Leader.PROPOSAL: writePacket(new QuorumPacket(Leader.ACK, newLeaderZxid, null, null), true); break; writePacket(ack, true); sock.setSoTimeout(self.tickTime * self.syncLimit); zk.startup();
public void flush() throws IOException { try { learner.writePacket(null, true); } catch(IOException e) { LOG.warn("Closing connection to leader, exception during packet send", e); try { if (!learner.sock.isClosed()) { learner.sock.close(); } } catch (IOException e1) { // Nothing to do, we are shutting things down, so an exception here is irrelevant LOG.debug("Ignoring error closing the connection", e1); } } }
@Override public void shutdown() { LOG.info("shutdown called", new Exception("shutdown Follower")); super.shutdown(); } }
@Override protected void revalidateSession(ServerCnxn cnxn, long sessionId, int sessionTimeout) throws IOException, InterruptedException { getLearner().validateSession(cnxn, sessionId, sessionTimeout); }
qp.setData(bsid.toByteArray()); writePacket(qp, true); readPacket(qp);
@Override public void revalidateSession(QuorumPacket qp, LearnerHandler learnerHandler) throws IOException { ByteArrayInputStream bis = new ByteArrayInputStream(qp.getData()); DataInputStream dis = new DataInputStream(bis); long id = dis.readLong(); int to = dis.readInt(); synchronized (revalidateSessionLock) { pendingRevalidations.add(new Revalidation(id, to, learnerHandler)); Learner learner = zks.getLearner(); if (learner != null) { learner.writePacket(qp, true); } } }
/** * Shutdown the Observer. */ public void shutdown() { LOG.info("shutdown called", new Exception("shutdown Observer")); super.shutdown(); } }
QuorumPacket qp = new QuorumPacket(); readPacket(qp); synchronized (zk) { if (qp.getType() == Leader.DIFF) { writePacket(ack, true); sock.setSoTimeout(self.tickTime * self.syncLimit); zk.startup();
/** * send a request packet to the leader * * @param request * the request from the client * @throws IOException */ void request(Request request) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream oa = new DataOutputStream(baos); oa.writeLong(request.sessionId); oa.writeInt(request.cxid); oa.writeInt(request.type); if (request.request != null) { request.request.rewind(); int len = request.request.remaining(); byte b[] = new byte[len]; request.request.get(b); request.request.rewind(); oa.write(b); } oa.close(); QuorumPacket qp = new QuorumPacket(Leader.REQUEST, -1, baos .toByteArray(), request.authInfo); writePacket(qp, true); }