Status WiredTigerKVEngine::repairIdent( OperationContext* opCtx, const StringData& ident ) { WiredTigerSession session( _conn, -1 ); WT_SESSION* s = session.getSession(); string uri = _uri(ident); return wtRCToStatus( s->compact(s, uri.c_str(), NULL ) ); }
static void * compact_thread(void *args) { WT_SESSION *session; session = (WT_SESSION *)args; testutil_check(session->compact(session, name, NULL)); return (NULL); }
void WiredTigerEngine::CompactRange(const Slice& begin, const Slice& end) { ContextHolder& holder = GetContextHolder(); WT_SESSION* session = holder.session; if (NULL == session) { return; } session->compact(session, ARDB_TABLE, NULL); }
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(); }
/* * compaction -- * Periodically do a compaction operation. */ WT_THREAD_RET compact(void *arg) { WT_CONNECTION *conn; WT_DECL_RET; WT_SESSION *session; u_int period; (void)(arg); /* Compaction isn't supported for all data sources. */ if (DATASOURCE("helium") || DATASOURCE("kvsbdb")) return (WT_THREAD_RET_VALUE); /* Open a session. */ conn = g.wts_conn; testutil_check(conn->open_session(conn, NULL, NULL, &session)); /* * Perform compaction at somewhere under 15 seconds (so we get at * least one done), and then at 23 second intervals. */ for (period = mmrand(NULL, 1, 15);; period = 23) { /* Sleep for short periods so we don't make the run wait. */ while (period > 0 && !g.workers_finished) { --period; __wt_sleep(1, 0); } if (g.workers_finished) break; /* * Compact can return EBUSY if concurrent with alter or if there * is eviction pressure, or we collide with checkpoints. * * Compact returns ETIMEDOUT if the compaction doesn't finish in * in some number of seconds. We don't configure a timeout and * occasionally exceed the default of 1200 seconds. */ ret = session->compact(session, g.uri, NULL); if (ret != 0 && ret != EBUSY && ret != ETIMEDOUT && ret != WT_ROLLBACK) testutil_die(ret, "session.compact"); } testutil_check(session->close(session, NULL)); return (WT_THREAD_RET_VALUE); }
/* * compaction -- * Periodically do a compaction operation. */ void * compact(void *arg) { WT_CONNECTION *conn; WT_SESSION *session; u_int period; int ret; (void)(arg); /* Compaction isn't supported for all data sources. */ if (DATASOURCE("helium") || DATASOURCE("kvsbdb")) return (NULL); /* Open a session. */ conn = g.wts_conn; testutil_check(conn->open_session(conn, NULL, NULL, &session)); /* * Perform compaction at somewhere under 15 seconds (so we get at * least one done), and then at 23 second intervals. */ for (period = mmrand(NULL, 1, 15);; period = 23) { /* Sleep for short periods so we don't make the run wait. */ while (period > 0 && !g.workers_finished) { --period; sleep(1); } if (g.workers_finished) break; if ((ret = session->compact( session, g.uri, NULL)) != 0 && ret != WT_ROLLBACK) testutil_die(ret, "session.compact"); } testutil_check(session->close(session, NULL)); return (NULL); }