/** * Copyright (C) 2016 MongoDB Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * * As a special exception, the copyright holders give permission to link the * code of portions of this program with the OpenSSL library under certain * conditions as described in each individual source file and distribute * linked combinations including the program with the OpenSSL library. You * must comply with the GNU Affero General Public License in all respects for * all of the code used other than as permitted herein. If you modify file(s) * with this exception, you may extend this exception to your version of the * file(s), but you are not obligated to do so. If you do not wish to do so, * delete this exception statement from your version. If you delete this * exception statement from all source files in the program, then also delete * it in the license file. */ #include "mongo/platform/basic.h" #include "mongo/db/catalog/collection.h" #include "mongo/db/catalog/database.h" #include "mongo/db/catalog/database_holder.h" #include "mongo/db/catalog/namespace_uuid_cache.h" #include "mongo/db/catalog/uuid_catalog.h" #include "mongo/db/op_observer_noop.h" namespace mongo { void OpObserverNoop::onCreateIndex( OperationContext*, const NamespaceString&, OptionalCollectionUUID, BSONObj, bool) {} void OpObserverNoop::onInserts(OperationContext*, const NamespaceString&, OptionalCollectionUUID, std::vector::const_iterator, std::vector::const_iterator, bool) {} void OpObserverNoop::onUpdate(OperationContext*, const OplogUpdateEntryArgs&) {} CollectionShardingState::DeleteState OpObserverNoop::aboutToDelete(OperationContext*, const NamespaceString&, const BSONObj&) { return {}; } void OpObserverNoop::onDelete(OperationContext*, const NamespaceString&, OptionalCollectionUUID, StmtId stmtId, CollectionShardingState::DeleteState, bool fromMigrate, const boost::optional& deletedDoc) {} void OpObserverNoop::onInternalOpMessage(OperationContext*, const NamespaceString&, const boost::optional, const BSONObj&, const boost::optional) {} void OpObserverNoop::onCreateCollection(OperationContext* opCtx, Collection* coll, const NamespaceString& collectionName, const CollectionOptions& options, const BSONObj& idIndex, const OplogSlot& createOpTime) { if (options.uuid) { UUIDCatalog& catalog = UUIDCatalog::get(opCtx); catalog.onCreateCollection(opCtx, coll, options.uuid.get()); NamespaceUUIDCache& cache = NamespaceUUIDCache::get(opCtx); opCtx->recoveryUnit()->onRollback( [&cache, collectionName]() { cache.evictNamespace(collectionName); }); } } void OpObserverNoop::onCollMod(OperationContext*, const NamespaceString&, OptionalCollectionUUID, const BSONObj&, const CollectionOptions& oldCollOptions, boost::optional ttlInfo) {} void OpObserverNoop::onDropDatabase(OperationContext*, const std::string&) {} repl::OpTime OpObserverNoop::onDropCollection(OperationContext* opCtx, const NamespaceString& collectionName, OptionalCollectionUUID uuid) { // Evict namespace entry from the namespace/uuid cache if it exists. NamespaceUUIDCache& cache = NamespaceUUIDCache::get(opCtx); cache.evictNamespace(collectionName); // Remove collection from the uuid catalog. if (uuid) { UUIDCatalog& catalog = UUIDCatalog::get(opCtx); catalog.onDropCollection(opCtx, uuid.get()); } return {}; } void OpObserverNoop::onDropIndex(OperationContext*, const NamespaceString&, OptionalCollectionUUID, const std::string&, const BSONObj&) {} repl::OpTime OpObserverNoop::onRenameCollection(OperationContext* opCtx, const NamespaceString& fromCollection, const NamespaceString& toCollection, OptionalCollectionUUID uuid, bool dropTarget, OptionalCollectionUUID dropTargetUUID, bool stayTemp) { // Evict namespace entry from the namespace/uuid cache if it exists. NamespaceUUIDCache& cache = NamespaceUUIDCache::get(opCtx); cache.evictNamespace(fromCollection); cache.evictNamespace(toCollection); opCtx->recoveryUnit()->onRollback( [&cache, toCollection]() { cache.evictNamespace(toCollection); }); // Finally update the UUID Catalog. if (uuid) { auto getNewCollection = [opCtx, toCollection] { auto db = dbHolder().get(opCtx, toCollection.db()); auto newColl = db->getCollection(opCtx, toCollection); invariant(newColl); return newColl; }; UUIDCatalog& catalog = UUIDCatalog::get(opCtx); catalog.onRenameCollection(opCtx, getNewCollection, uuid.get()); } return {}; } void OpObserverNoop::onApplyOps(OperationContext*, const std::string&, const BSONObj&) {} void OpObserverNoop::onEmptyCapped(OperationContext*, const NamespaceString&, OptionalCollectionUUID) {} } // namespace mongo