Database::Database(OperationContext* txn, StringData name, DatabaseCatalogEntry* dbEntry) : _name(name.toString()), _dbEntry(dbEntry), _profileName(_name + ".system.profile"), _indexesName(_name + ".system.indexes"), _viewsName(_name + "." + DurableViewCatalog::viewsCollectionName().toString()), _durableViews(DurableViewCatalogImpl(this)), _views(&_durableViews) { Status status = validateDBName(_name); if (!status.isOK()) { warning() << "tried to open invalid db: " << _name; uasserted(10028, status.toString()); } _profile = serverGlobalParams.defaultProfile; list<string> collections; _dbEntry->getCollectionNamespaces(&collections); for (list<string>::const_iterator it = collections.begin(); it != collections.end(); ++it) { const string ns = *it; _collections[ns] = _getOrCreateCollectionInstance(txn, ns); } // At construction time of the viewCatalog, the _collections map wasn't initialized yet, so no // system.views collection would be found. Now we're sufficiently initialized, signal a version // change. Also force a reload, so if there are problems with the catalog contents as might be // caused by incorrect mongod versions or similar, they are found right away. _views.invalidate(); Status reloadStatus = _views.reloadIfNeeded(txn); if (!reloadStatus.isOK()) { warning() << "Unable to parse views: " << redact(reloadStatus) << "; remove any invalid views from the " << _viewsName << " collection to restore server functionality." << startupWarningsLog; } }
Database::Database(OperationContext* txn, StringData name, DatabaseCatalogEntry* dbEntry) : _name(name.toString()), _dbEntry(dbEntry), _profileName(_name + ".system.profile"), _indexesName(_name + ".system.indexes"), _viewsName(_name + ".system.views"), _durableViews(DurableViewCatalogImpl(this)), _views(txn, &_durableViews) { Status status = validateDBName(_name); if (!status.isOK()) { warning() << "tried to open invalid db: " << _name << endl; uasserted(10028, status.toString()); } _profile = serverGlobalParams.defaultProfile; list<string> collections; _dbEntry->getCollectionNamespaces(&collections); for (list<string>::const_iterator it = collections.begin(); it != collections.end(); ++it) { const string ns = *it; _collections[ns] = _getOrCreateCollectionInstance(txn, ns); } }