in server/src/main/scala/org/apache/livy/sessions/SessionManager.scala [158:202]
def collectGarbage(): Future[Iterable[Unit]] = {
def expired(session: Session): Boolean = {
session.state match {
case s: FinishedSessionState =>
val currentTime = System.nanoTime()
currentTime - s.time > sessionStateRetainedInSec
case _ =>
if (!sessionTimeoutCheck) {
false
} else if (session.state == SessionState.Busy && sessionTimeoutCheckSkipBusy) {
false
} else if (session.isInstanceOf[BatchSession]) {
false
} else {
val currentTime = System.nanoTime()
var calculatedTimeout = sessionTimeout;
if (session.idleTimeout.isDefined) {
calculatedTimeout = ClientConf.getTimeAsMs(session.idleTimeout.get)
}
calculatedTimeout = TimeUnit.MILLISECONDS.toNanos(calculatedTimeout)
if (currentTime - session.lastActivity > calculatedTimeout) {
return true
}
if (session.ttl.isDefined && session.startedOn.isDefined) {
calculatedTimeout = TimeUnit.MILLISECONDS.toNanos(
ClientConf.getTimeAsMs(session.ttl.get))
if (currentTime - session.startedOn.get > calculatedTimeout) {
return true
}
}
false
}
}
}
Future.sequence(all().filter(expired).map { s =>
s.state match {
case _: FinishedSessionState =>
info(s"Deleting $s because it finished before ${sessionStateRetainedInSec / 1e9} secs.")
case _ =>
info(s"Deleting $s because it was inactive for more than ${sessionTimeout / 1e9} secs.")
}
delete(s)
})
}