diff options
4 files changed, 50 insertions, 40 deletions
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_column_store.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_column_store.cpp index 9f0561911b8..25d4c623b14 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_column_store.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_column_store.cpp @@ -446,14 +446,11 @@ Status WiredTigerColumnStore::compact(OperationContext* opCtx) { // TODO: SERVER-65980. uasserted(ErrorCodes::NotImplemented, "WiredTigerColumnStore::compact"); } + bool WiredTigerColumnStore::appendCustomStats(OperationContext* opCtx, BSONObjBuilder* output, double scale) const { - // TODO: SERVER-65980. - // For now we just skip this so that tests can successfully obtain collection-level stats on a - // collection with a columnstore index. - output->append("note"_sd, "columnstore stats are not yet implemented"_sd); - return true; + return WiredTigerUtil::appendCustomStats(opCtx, output, scale, _uri); } } // namespace mongo diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_index.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_index.cpp index ce6f7bb0a84..55455b95c66 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_index.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_index.cpp @@ -375,41 +375,7 @@ void WiredTigerIndex::fullValidate(OperationContext* opCtx, bool WiredTigerIndex::appendCustomStats(OperationContext* opCtx, BSONObjBuilder* output, double scale) const { - dassert(opCtx->lockState()->isReadLocked()); - { - BSONObjBuilder metadata(output->subobjStart("metadata")); - Status status = WiredTigerUtil::getApplicationMetadata(opCtx, uri(), &metadata); - if (!status.isOK()) { - metadata.append("error", "unable to retrieve metadata"); - metadata.append("code", static_cast<int>(status.code())); - metadata.append("reason", status.reason()); - } - } - std::string type, sourceURI; - WiredTigerUtil::fetchTypeAndSourceURI(opCtx, _uri, &type, &sourceURI); - StatusWith<std::string> metadataResult = WiredTigerUtil::getMetadataCreate(opCtx, sourceURI); - StringData creationStringName("creationString"); - if (!metadataResult.isOK()) { - BSONObjBuilder creationString(output->subobjStart(creationStringName)); - creationString.append("error", "unable to retrieve creation config"); - creationString.append("code", static_cast<int>(metadataResult.getStatus().code())); - creationString.append("reason", metadataResult.getStatus().reason()); - } else { - output->append(creationStringName, metadataResult.getValue()); - // Type can be "lsm" or "file" - output->append("type", type); - } - - WiredTigerSession* session = WiredTigerRecoveryUnit::get(opCtx)->getSession(); - WT_SESSION* s = session->getSession(); - Status status = - WiredTigerUtil::exportTableToBSON(s, "statistics:" + uri(), "statistics=(fast)", output); - if (!status.isOK()) { - output->append("error", "unable to retrieve statistics"); - output->append("code", static_cast<int>(status.code())); - output->append("reason", status.reason()); - } - return true; + return WiredTigerUtil::appendCustomStats(opCtx, output, scale, _uri); } Status WiredTigerIndex::dupKeyCheck(OperationContext* opCtx, const KeyString::Value& key) { diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp index ab4623f5441..3da5ec9bcc0 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp @@ -561,6 +561,48 @@ size_t WiredTigerUtil::getCacheSizeMB(double requestedCacheSizeGB) { return static_cast<size_t>(cacheSizeMB); } +bool WiredTigerUtil::appendCustomStats(OperationContext* opCtx, + BSONObjBuilder* output, + double scale, + const std::string& uri) { + dassert(opCtx->lockState()->isReadLocked()); + { + BSONObjBuilder metadata(output->subobjStart("metadata")); + Status status = WiredTigerUtil::getApplicationMetadata(opCtx, uri, &metadata); + if (!status.isOK()) { + metadata.append("error", "unable to retrieve metadata"); + metadata.append("code", static_cast<int>(status.code())); + metadata.append("reason", status.reason()); + } + } + std::string type, sourceURI; + WiredTigerUtil::fetchTypeAndSourceURI(opCtx, uri, &type, &sourceURI); + StatusWith<std::string> metadataResult = WiredTigerUtil::getMetadataCreate(opCtx, sourceURI); + StringData creationStringName("creationString"); + if (!metadataResult.isOK()) { + BSONObjBuilder creationString(output->subobjStart(creationStringName)); + creationString.append("error", "unable to retrieve creation config"); + creationString.append("code", static_cast<int>(metadataResult.getStatus().code())); + creationString.append("reason", metadataResult.getStatus().reason()); + } else { + output->append(creationStringName, metadataResult.getValue()); + // Type can be "lsm" or "file" + output->append("type", type); + } + + WiredTigerSession* session = WiredTigerRecoveryUnit::get(opCtx)->getSession(); + WT_SESSION* s = session->getSession(); + Status status = + WiredTigerUtil::exportTableToBSON(s, "statistics:" + uri, "statistics=(fast)", output); + if (!status.isOK()) { + output->append("error", "unable to retrieve statistics"); + output->append("code", static_cast<int>(status.code())); + output->append("reason", status.reason()); + } + return true; +} + + logv2::LogSeverity getWTLOGV2SeverityLevel(const BSONObj& obj) { const std::string field = "verbose_level_id"; diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_util.h b/src/mongo/db/storage/wiredtiger/wiredtiger_util.h index b17dfcb6f85..a042ffd0681 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_util.h +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_util.h @@ -276,6 +276,11 @@ public: static int64_t getIdentSize(WT_SESSION* s, const std::string& uri); + static bool appendCustomStats(OperationContext* opCtx, + BSONObjBuilder* output, + double scale, + 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. |