Status Database::renameCollection( OperationContext* txn, const StringData& fromNS, const StringData& toNS, bool stayTemp ) { audit::logRenameCollection( currentClient.get(), fromNS, toNS ); { // remove anything cached Collection* coll = getCollection( txn, fromNS ); if ( !coll ) return Status( ErrorCodes::NamespaceNotFound, "collection not found to rename" ); IndexCatalog::IndexIterator ii = coll->getIndexCatalog()->getIndexIterator( true ); while ( ii.more() ) { IndexDescriptor* desc = ii.next(); _clearCollectionCache( desc->indexNamespace() ); } { scoped_lock lk( _collectionLock ); _clearCollectionCache_inlock( fromNS ); _clearCollectionCache_inlock( toNS ); } Top::global.collectionDropped( fromNS.toString() ); } return _dbEntry->renameCollection( txn, fromNS, toNS, stayTemp ); }
void Database::_clearCollectionCache( const StringData& fullns ) { scoped_lock lk( _collectionLock ); _clearCollectionCache_inlock( fullns ); }
void Database::_clearCollectionCache(OperationContext* txn, const StringData& fullns ) { scoped_lock lk( _collectionLock ); _clearCollectionCache_inlock( txn, fullns ); }