summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage/wiredtiger
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/storage/wiredtiger')
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_index.cpp8
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_index.h2
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp7
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp7
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_util.h6
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