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