logger.log(Level.FINE, "Closing session {0}", sess.getName()); closeSession(sess);
private void keepAliveSessions(Instant currTime) { long numSessionsToKeepAlive = 0; synchronized (lock) { // In each cycle only keep alive a subset of sessions to prevent burst of traffic. numSessionsToKeepAlive = (long) Math.ceil((double) totalSessions() / numKeepAliveCycles); } // Now go over all the remaining sessions and see if they need to be kept alive explicitly. Instant keepAliveThreshold = currTime.minus(keepAliveMilis); // Keep chugging till there is no session that needs to be kept alive. while (numSessionsToKeepAlive > 0) { PooledSession sessionToKeepAlive = null; synchronized (lock) { sessionToKeepAlive = findSessionToKeepAlive(readSessions, keepAliveThreshold); if (sessionToKeepAlive == null) { sessionToKeepAlive = findSessionToKeepAlive(writePreparedSessions, keepAliveThreshold); } } if (sessionToKeepAlive == null) { break; } try { logger.log(Level.FINE, "Keeping alive session " + sessionToKeepAlive.getName()); numSessionsToKeepAlive--; sessionToKeepAlive.keepAlive(); releaseSession(sessionToKeepAlive); } catch (SpannerException e) { handleException(e, sessionToKeepAlive); } } }
private void closeSession(PooledSession sess) { try { sess.delegate.close(); } catch (SpannerException e) { // Backend will delete these sessions after a while even if we fail to close them. if (logger.isLoggable(Level.FINE)) { logger.log(Level.FINE, "Failed to close session: " + sess.getName(), e); } } finally { synchronized (lock) { allSessions.remove(sess); if (isClosed()) { decrementPendingClosures(); return; } // Create a new session if needed to unblock some waiter. if (numWaiters() > numSessionsBeingCreated) { createSession(); } } } }
logger.log(Level.FINE, "Closing session {0}", sess.getName()); closeSession(sess);
private void keepAliveSessions(Instant currTime) { long numSessionsToKeepAlive = 0; synchronized (lock) { // In each cycle only keep alive a subset of sessions to prevent burst of traffic. numSessionsToKeepAlive = (long) Math.ceil((double) totalSessions() / numKeepAliveCycles); } // Now go over all the remaining sessions and see if they need to be kept alive explicitly. Instant keepAliveThreshold = currTime.minus(keepAliveMilis); // Keep chugging till there is no session that needs to be kept alive. while (numSessionsToKeepAlive > 0) { PooledSession sessionToKeepAlive = null; synchronized (lock) { sessionToKeepAlive = findSessionToKeepAlive(readSessions, keepAliveThreshold); if (sessionToKeepAlive == null) { sessionToKeepAlive = findSessionToKeepAlive(writePreparedSessions, keepAliveThreshold); } } if (sessionToKeepAlive == null) { break; } try { logger.log(Level.FINE, "Keeping alive session " + sessionToKeepAlive.getName()); numSessionsToKeepAlive--; sessionToKeepAlive.keepAlive(); releaseSession(sessionToKeepAlive); } catch (SpannerException e) { handleException(e, sessionToKeepAlive); } } }
private void closeSession(PooledSession sess) { try { sess.delegate.close(); } catch (SpannerException e) { // Backend will delete these sessions after a while even if we fail to close them. if (logger.isLoggable(Level.FINE)) { logger.log(Level.FINE, "Failed to close session: " + sess.getName(), e); } } finally { synchronized (lock) { allSessions.remove(sess); if (isClosed()) { decrementPendingClosures(); return; } // Create a new session if needed to unblock some waiter. if (numWaiters() > numSessionsBeingCreated) { createSession(); } } } }