diff options
| author | Apollon Oikonomopoulos <apoikos@debian.org> | 2018-03-22 12:08:05 +0200 |
|---|---|---|
| committer | Apollon Oikonomopoulos <apoikos@debian.org> | 2018-03-22 12:08:05 +0200 |
| commit | 72ad42c506a506ef238d4b1fdcf2b9da5668bfb9 (patch) | |
| tree | df94bdab3d6f16e14016f4547b9e86f368ba8150 /src/mongo/db/op_observer_impl.cpp | |
| parent | 648fcfa3cf11ba8fdb7bb64c52f3159b4351ae3c (diff) | |
| parent | c49e99631589113663b1a3ac691870421965a315 (diff) | |
Update upstream source from tag 'upstream/3.4.14'
Update to upstream version '3.4.14'
with Debian dir 8c079cd0bdbb1831aa5b89a3b7d4c1b4a1b891a2
Diffstat (limited to 'src/mongo/db/op_observer_impl.cpp')
| -rw-r--r-- | src/mongo/db/op_observer_impl.cpp | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/src/mongo/db/op_observer_impl.cpp b/src/mongo/db/op_observer_impl.cpp index 00560851a7a..91bc3317d48 100644 --- a/src/mongo/db/op_observer_impl.cpp +++ b/src/mongo/db/op_observer_impl.cpp @@ -42,9 +42,12 @@ #include "mongo/db/server_options.h" #include "mongo/db/views/durable_view_catalog.h" #include "mongo/scripting/engine.h" +#include "mongo/util/fail_point_service.h" namespace mongo { +MONGO_FP_DECLARE(failCollectionUpdates); + void OpObserverImpl::onCreateIndex(OperationContext* txn, const std::string& ns, BSONObj indexDoc, @@ -80,7 +83,7 @@ void OpObserverImpl::onInserts(OperationContext* txn, if (nss.ns() == FeatureCompatibilityVersion::kCollection) { for (auto it = begin; it != end; it++) { - FeatureCompatibilityVersion::onInsertOrUpdate(*it); + FeatureCompatibilityVersion::onInsertOrUpdate(txn, *it); } } @@ -94,6 +97,20 @@ void OpObserverImpl::onInserts(OperationContext* txn, } void OpObserverImpl::onUpdate(OperationContext* txn, const OplogUpdateEntryArgs& args) { + MONGO_FAIL_POINT_BLOCK(failCollectionUpdates, extraData) { + auto collElem = extraData.getData()["collectionNS"]; + // If the failpoint specifies no collection or matches the existing one, fail. + if (!collElem || args.ns == collElem.String()) { + uasserted(40654, + str::stream() << "failCollectionUpdates failpoint enabled, namespace: " + << args.ns + << ", update: " + << args.update + << " on document with " + << args.criteria); + } + } + // Do not log a no-op operation; see SERVER-21738 if (args.update.isEmpty()) { return; @@ -119,7 +136,7 @@ void OpObserverImpl::onUpdate(OperationContext* txn, const OplogUpdateEntryArgs& } if (args.ns == FeatureCompatibilityVersion::kCollection) { - FeatureCompatibilityVersion::onInsertOrUpdate(args.updatedDoc); + FeatureCompatibilityVersion::onInsertOrUpdate(txn, args.updatedDoc); } } @@ -162,7 +179,7 @@ void OpObserverImpl::onDelete(OperationContext* txn, DurableViewCatalog::onExternalChange(txn, ns); } if (ns.ns() == FeatureCompatibilityVersion::kCollection) { - FeatureCompatibilityVersion::onDelete(deleteState.idDoc); + FeatureCompatibilityVersion::onDelete(txn, deleteState.idDoc); } } @@ -221,7 +238,7 @@ void OpObserverImpl::onDropDatabase(OperationContext* txn, const std::string& db repl::logOp(txn, "c", dbName.c_str(), cmdObj, nullptr, false); if (NamespaceString(dbName).db() == FeatureCompatibilityVersion::kDatabase) { - FeatureCompatibilityVersion::onDropCollection(); + FeatureCompatibilityVersion::onDropCollection(txn); } getGlobalAuthorizationManager()->logOp(txn, "c", dbName.c_str(), cmdObj, nullptr); @@ -243,7 +260,7 @@ void OpObserverImpl::onDropCollection(OperationContext* txn, } if (collectionName.ns() == FeatureCompatibilityVersion::kCollection) { - FeatureCompatibilityVersion::onDropCollection(); + FeatureCompatibilityVersion::onDropCollection(txn); } getGlobalAuthorizationManager()->logOp(txn, "c", dbName.c_str(), cmdObj, nullptr); @@ -276,11 +293,10 @@ void OpObserverImpl::onRenameCollection(OperationContext* txn, << dropTarget); repl::logOp(txn, "c", dbName.c_str(), cmdObj, nullptr, false); - if (fromCollection.coll() == DurableViewCatalog::viewsCollectionName() || - toCollection.coll() == DurableViewCatalog::viewsCollectionName()) { - DurableViewCatalog::onExternalChange( - txn, NamespaceString(DurableViewCatalog::viewsCollectionName())); - } + if (fromCollection.isSystemDotViews()) + DurableViewCatalog::onExternalChange(txn, fromCollection); + if (toCollection.isSystemDotViews()) + DurableViewCatalog::onExternalChange(txn, toCollection); getGlobalAuthorizationManager()->logOp(txn, "c", dbName.c_str(), cmdObj, nullptr); logOpForDbHash(txn, dbName.c_str()); |
