public final Session getSessionByKey(final String key) { if (this.sessions == null || this.sessions.size() == 0) { return null; } // Copy on read List<List<Session>> sessionList = this.sessions; int size = sessionList.size(); if (size == 0) { return null; } long start = this.getHash(size, key); List<Session> sessions = sessionList.get((int) start); Session session = getRandomSession(sessions); // If it is not failure mode,get next available session if (!this.failureMode && (session == null || session.isClosed())) { long next = this.getNext(size, start); while ((session == null || session.isClosed()) && next != start) { sessions = sessionList.get((int) next); next = this.getNext(size, next); session = getRandomSession(sessions); } } return session; }
public final Session getSessionByKey(final String key) { if (this.sessions == null || this.sessions.size() == 0) { return null; } // Copy on read List<List<Session>> sessionList = this.sessions; int size = sessionList.size(); if (size == 0) { return null; } long start = this.getHash(size, key); List<Session> sessions = sessionList.get((int) start); Session session = getRandomSession(sessions); // If it is not failure mode,get next available session if (!this.failureMode && (session == null || session.isClosed())) { long next = this.getNext(size, start); while ((session == null || session.isClosed()) && next != start) { sessions = sessionList.get((int) next); next = this.getNext(size, next); session = getRandomSession(sessions); } } return session; }