bool run(OperationContext* opCtx, const std::string& dbName, const BSONObj& cmdObj, BSONObjBuilder& result) final { AutoGetDb dblock(opCtx, dbName, LockMode::MODE_IS); auto db = dblock.getDb(); uassert(ErrorCodes::NamespaceNotFound, str::stream() << "database " << dbName << " does not exist", db); db->getViewCatalog()->invalidate(); return true; }
void Database::getStats(OperationContext* opCtx, BSONObjBuilder* output, double scale) { list<string> collections; _dbEntry->getCollectionNamespaces(&collections); long long nCollections = 0; long long nViews = 0; long long objects = 0; long long size = 0; long long storageSize = 0; long long numExtents = 0; long long indexes = 0; long long indexSize = 0; for (list<string>::const_iterator it = collections.begin(); it != collections.end(); ++it) { const string ns = *it; Collection* collection = getCollection(ns); if (!collection) continue; nCollections += 1; objects += collection->numRecords(opCtx); size += collection->dataSize(opCtx); BSONObjBuilder temp; storageSize += collection->getRecordStore()->storageSize(opCtx, &temp); numExtents += temp.obj()["numExtents"].numberInt(); // XXX indexes += collection->getIndexCatalog()->numIndexesTotal(opCtx); indexSize += collection->getIndexSize(opCtx); } getViewCatalog()->iterate(opCtx, [&](const ViewDefinition& view) { nViews += 1; }); output->appendNumber("collections", nCollections); output->appendNumber("views", nViews); output->appendNumber("objects", objects); output->append("avgObjSize", objects == 0 ? 0 : double(size) / double(objects)); output->appendNumber("dataSize", size / scale); output->appendNumber("storageSize", storageSize / scale); output->appendNumber("numExtents", numExtents); output->appendNumber("indexes", indexes); output->appendNumber("indexSize", indexSize / scale); _dbEntry->appendExtraStats(opCtx, output, scale); }
void ViewCatalog::set(Database* db, std::unique_ptr<ViewCatalog> catalog) { getViewCatalog(db) = std::move(catalog); }
ViewCatalog* ViewCatalog::get(Database* db) { return getViewCatalog(db).get(); }