Status WiredTigerRecordStore::compact(OperationContext* txn,
                                      RecordStoreCompactAdaptor* adaptor,
                                      const CompactOptions* options,
                                      CompactStats* stats) {
    WiredTigerSessionCache* cache = WiredTigerRecoveryUnit::get(txn)->getSessionCache();
    WiredTigerSession* session = cache->getSession();
    WT_SESSION* s = session->getSession();
    int ret = s->compact(s, getURI().c_str(), "timeout=0");
    invariantWTOK(ret);
    cache->releaseSession(session);
    return Status::OK();
}
TEST(WiredTigerSessionCacheTest, CheckSessionCacheCleanup) {
    WiredTigerSessionCacheHarnessHelper harnessHelper("");
    WiredTigerSessionCache* sessionCache = harnessHelper.getSessionCache();
    ASSERT_EQUALS(sessionCache->getIdleSessionsCount(), 0U);
    {
        UniqueWiredTigerSession _session = sessionCache->getSession();
        ASSERT_EQUALS(sessionCache->getIdleSessionsCount(), 0U);
    }
    // Destroying of a session puts it in the session cache
    ASSERT_EQUALS(sessionCache->getIdleSessionsCount(), 1U);

    // An idle timeout of 0 means never expire idle sessions
    sessionCache->closeExpiredIdleSessions(0);
    ASSERT_EQUALS(sessionCache->getIdleSessionsCount(), 1U);
    sleepmillis(10);

    // Expire sessions that have been idle for 10 secs
    sessionCache->closeExpiredIdleSessions(10000);
    ASSERT_EQUALS(sessionCache->getIdleSessionsCount(), 1U);
    // Expire sessions that have been idle for 2 millisecs
    sessionCache->closeExpiredIdleSessions(2);
    ASSERT_EQUALS(sessionCache->getIdleSessionsCount(), 0U);
}