diff options
Diffstat (limited to 'src/mongo/db/storage/wiredtiger')
5 files changed, 24 insertions, 6 deletions
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_index.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_index.cpp index 6046ab6e43e..455a1569fe8 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_index.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_index.cpp @@ -470,6 +470,14 @@ long long WiredTigerIndex::getSpaceUsedBytes(OperationContext* opCtx) const { return static_cast<long long>(WiredTigerUtil::getIdentSize(session->getSession(), _uri)); } +long long WiredTigerIndex::getFreeStorageBytes(OperationContext* opCtx) const { + dassert(opCtx->lockState()->isReadLocked()); + auto ru = WiredTigerRecoveryUnit::get(opCtx); + WiredTigerSession* session = ru->getSession(); + + return static_cast<long long>(WiredTigerUtil::getIdentReuseSize(session->getSession(), _uri)); +} + bool WiredTigerIndex::isDup(OperationContext* opCtx, WT_CURSOR* c, const KeyString::Value& key) { dassert(opCtx->lockState()->isReadLocked()); invariant(unique()); diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_index.h b/src/mongo/db/storage/wiredtiger/wiredtiger_index.h index f5dc594d30b..a0268a4181c 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_index.h +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_index.h @@ -118,6 +118,8 @@ public: virtual long long getSpaceUsedBytes(OperationContext* opCtx) const; + virtual long long getFreeStorageBytes(OperationContext* opCtx) const; + virtual Status initAsEmpty(OperationContext* opCtx); Status compact(OperationContext* opCtx) override; diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp index a2adafb35ea..d6338be1b1d 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp @@ -1000,12 +1000,7 @@ int64_t WiredTigerRecordStore::freeStorageSize(OperationContext* opCtx) const { invariant(opCtx->lockState()->isReadLocked()); WiredTigerSession* session = WiredTigerRecoveryUnit::get(opCtx)->getSessionNoTxn(); - auto result = WiredTigerUtil::getStatisticsValue(session->getSession(), - "statistics:" + getURI(), - "statistics=(fast)", - WT_STAT_DSRC_BLOCK_REUSE_BYTES); - uassertStatusOK(result.getStatus()); - return result.getValue(); + return WiredTigerUtil::getIdentReuseSize(session->getSession(), getURI()); } // Retrieve the value from a positioned cursor. diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp index e94e94dcc10..13bc45e0693 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp @@ -468,6 +468,13 @@ int64_t WiredTigerUtil::getIdentSize(WT_SESSION* s, const std::string& uri) { return result.getValue(); } +int64_t WiredTigerUtil::getIdentReuseSize(WT_SESSION* s, const std::string& uri) { + auto result = WiredTigerUtil::getStatisticsValue( + s, "statistics:" + uri, "statistics=(fast)", WT_STAT_DSRC_BLOCK_REUSE_BYTES); + uassertStatusOK(result.getStatus()); + return result.getValue(); +} + size_t WiredTigerUtil::getCacheSizeMB(double requestedCacheSizeGB) { double cacheSizeMB; const double kMaxSizeCacheMB = 10 * 1000 * 1000; diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_util.h b/src/mongo/db/storage/wiredtiger/wiredtiger_util.h index 5150c19e153..57a8d7189fc 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_util.h +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_util.h @@ -220,6 +220,12 @@ public: static int64_t getIdentSize(WT_SESSION* s, const std::string& uri); + /** + * Returns the bytes available for reuse for an ident. This is the amount of allocated space on + * disk that is not storing any data. + */ + static int64_t getIdentReuseSize(WT_SESSION* s, const std::string& uri); + /** * Return amount of memory to use for the WiredTiger cache based on either the startup |