diff options
author | Maria van Keulen <maria@mongodb.com> | 2018-05-17 15:12:05 -0400 |
---|---|---|
committer | Maria van Keulen <maria@mongodb.com> | 2018-06-06 16:54:44 -0400 |
commit | 7c12245583958023e35bce05d6b2212dcd7f24e3 (patch) | |
tree | 4cfa8bb4915cef1973b208d33fa6023b1c5cdb65 /src/mongo/db/op_observer_impl.cpp | |
parent | 0b001ed1ab7e8443213db38030cf17d2a6f5be2c (diff) | |
download | mongo-7c12245583958023e35bce05d6b2212dcd7f24e3.tar.gz |
SERVER-34615 Make UUIDCatalog updates for renameCollection atomic
Diffstat (limited to 'src/mongo/db/op_observer_impl.cpp')
-rw-r--r-- | src/mongo/db/op_observer_impl.cpp | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/src/mongo/db/op_observer_impl.cpp b/src/mongo/db/op_observer_impl.cpp index 40173774735..aa85d823222 100644 --- a/src/mongo/db/op_observer_impl.cpp +++ b/src/mongo/db/op_observer_impl.cpp @@ -766,12 +766,13 @@ void OpObserverImpl::onDropIndex(OperationContext* opCtx, ->logOp(opCtx, "c", cmdNss, cmdObj, &indexInfo); } -repl::OpTime OpObserverImpl::onRenameCollection(OperationContext* const opCtx, - const NamespaceString& fromCollection, - const NamespaceString& toCollection, - OptionalCollectionUUID uuid, - OptionalCollectionUUID dropTargetUUID, - bool stayTemp) { + +repl::OpTime OpObserverImpl::preRenameCollection(OperationContext* const opCtx, + const NamespaceString& fromCollection, + const NamespaceString& toCollection, + OptionalCollectionUUID uuid, + OptionalCollectionUUID dropTargetUUID, + bool stayTemp) { const auto cmdNss = fromCollection.getCommandNS(); BSONObjBuilder builder; @@ -796,6 +797,27 @@ repl::OpTime OpObserverImpl::onRenameCollection(OperationContext* const opCtx, kUninitializedStmtId, {}); + return {}; +} + +void OpObserverImpl::postRenameCollection(OperationContext* const opCtx, + const NamespaceString& fromCollection, + const NamespaceString& toCollection, + OptionalCollectionUUID uuid, + OptionalCollectionUUID dropTargetUUID, + bool stayTemp) { + const auto cmdNss = fromCollection.getCommandNS(); + + BSONObjBuilder builder; + builder.append("renameCollection", fromCollection.ns()); + builder.append("to", toCollection.ns()); + builder.append("stayTemp", stayTemp); + if (dropTargetUUID) { + dropTargetUUID->appendToBuilder(&builder, "dropTarget"); + } + + const auto cmdObj = builder.done(); + if (fromCollection.isSystemDotViews()) DurableViewCatalog::onExternalChange(opCtx, fromCollection); if (toCollection.isSystemDotViews()) @@ -810,8 +832,16 @@ repl::OpTime OpObserverImpl::onRenameCollection(OperationContext* const opCtx, cache.evictNamespace(toCollection); opCtx->recoveryUnit()->onRollback( [&cache, toCollection]() { cache.evictNamespace(toCollection); }); +} - return {}; +void OpObserverImpl::onRenameCollection(OperationContext* const opCtx, + const NamespaceString& fromCollection, + const NamespaceString& toCollection, + OptionalCollectionUUID uuid, + OptionalCollectionUUID dropTargetUUID, + bool stayTemp) { + preRenameCollection(opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp); + postRenameCollection(opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp); } void OpObserverImpl::onApplyOps(OperationContext* opCtx, |