def collectGarbage()

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)
    })
  }