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(TransactionExperiment* txn, const char *nm, bool& newDb, const string& path ) : _name(nm), _path(path), _namespaceIndex( _path, _name ), _extentManager(new MmapV1ExtentManager(_name, _path, storageGlobalParams.directoryperdb)), _profileName(_name + ".system.profile"), _namespacesName(_name + ".system.namespaces"), _indexesName(_name + ".system.indexes"), _collectionLock( "Database::_collectionLock" ) { Status status = validateDBName( _name ); if ( !status.isOK() ) { warning() << "tried to open invalid db: " << _name << endl; uasserted( 10028, status.toString() ); } try { newDb = _namespaceIndex.exists(); _profile = serverGlobalParams.defaultProfile; checkDuplicateUncasedNames(true); // If already exists, open. Otherwise behave as if empty until // there's a write, then open. if (!newDb) { _namespaceIndex.init( txn ); openAllFiles(txn); // upgrade freelist string oldFreeList = _name + ".$freelist"; NamespaceDetails* details = _namespaceIndex.details( oldFreeList ); if ( details ) { if ( !details->firstExtent().isNull() ) { _extentManager->freeExtents(txn, details->firstExtent(), details->lastExtent()); } _namespaceIndex.kill_ns( txn, oldFreeList ); } } _magic = 781231; } catch(std::exception& e) { log() << "warning database " << path << " " << nm << " could not be opened" << endl; DBException* dbe = dynamic_cast<DBException*>(&e); if ( dbe != 0 ) { log() << "DBException " << dbe->getCode() << ": " << e.what() << endl; } else { log() << e.what() << endl; } _extentManager.reset(); throw; } }
Database::Database(const StringData& name, DatabaseCatalogEntry* dbEntry) : _name(name.toString()), _dbEntry( dbEntry ), _profileName(_name + ".system.profile"), _indexesName(_name + ".system.indexes"), _collectionLock( "Database::_collectionLock" ) { Status status = validateDBName( _name ); if ( !status.isOK() ) { warning() << "tried to open invalid db: " << _name << endl; uasserted( 10028, status.toString() ); } _profile = serverGlobalParams.defaultProfile; }
Database::Database(OperationContext* txn, const char *nm, bool& newDb, const string& path ) : _name(nm), _path(path), _dbEntry(new MMAP1DatabaseCatalogEntry( txn, _name, _path, storageGlobalParams.directoryperdb) ), _profileName(_name + ".system.profile"), _namespacesName(_name + ".system.namespaces"), _indexesName(_name + ".system.indexes"), _collectionLock( "Database::_collectionLock" ) { Status status = validateDBName( _name ); if ( !status.isOK() ) { warning() << "tried to open invalid db: " << _name << endl; uasserted( 10028, status.toString() ); } _profile = serverGlobalParams.defaultProfile; newDb = !_dbEntry->exists(); }
Database::Database(OperationContext* txn, const std::string& name, bool& newDb, DatabaseCatalogEntry* dbEntry ) : _name(name), _dbEntry( dbEntry ), _profileName(_name + ".system.profile"), _namespacesName(_name + ".system.namespaces"), _indexesName(_name + ".system.indexes"), _collectionLock( "Database::_collectionLock" ) { Status status = validateDBName( _name ); if ( !status.isOK() ) { warning() << "tried to open invalid db: " << _name << endl; uasserted( 10028, status.toString() ); } _profile = serverGlobalParams.defaultProfile; newDb = !_dbEntry->exists(); }
Database::Database(OperationContext* txn, StringData name, DatabaseCatalogEntry* dbEntry) : _name(name.toString()), _dbEntry(dbEntry), _profileName(_name + ".system.profile"), _indexesName(_name + ".system.indexes") { 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); } }
Database::Database(const char *nm, bool& newDb, const string& path ) : _name(nm), _path(path), _namespaceIndex( _path, _name ), _extentManager( _name, _path, directoryperdb /* this is a global right now */ ), _profileName(_name + ".system.profile"), _namespacesName(_name + ".system.namespaces"), _collectionLock( "Database::_collectionLock" ) { Status status = validateDBName( _name ); if ( !status.isOK() ) { warning() << "tried to open invalid db: " << _name << endl; uasserted( 10028, status.toString() ); } try { newDb = _namespaceIndex.exists(); _profile = cmdLine.defaultProfile; checkDuplicateUncasedNames(true); // If already exists, open. Otherwise behave as if empty until // there's a write, then open. if (!newDb) { _namespaceIndex.init(); openAllFiles(); } _magic = 781231; } catch(std::exception& e) { log() << "warning database " << path << " " << nm << " could not be opened" << endl; DBException* dbe = dynamic_cast<DBException*>(&e); if ( dbe != 0 ) { log() << "DBException " << dbe->getCode() << ": " << e.what() << endl; } else { log() << e.what() << endl; } _extentManager.reset(); throw; } }